溢出之后

通常,int类型(32位补码表示)的最大值INT_MAX = 231 -1 = 2147483647,于是有109 < INT_MAX < 1010

  • 有个int类型的数10倍10倍地增长,如果不记录乘过的次数,怎么判断它是否已经溢出了?

把1010丢进int类型的变量里,恩,溢出了,溢出咋滴?

溢出了可能变负数了。

溢出了可能就比109小了。

然而并没有。

1010 mod 232 = 1410065408

INT_MAX小,所以是个正数。比109大。

我就来反思下我做Number of Digit One时犯的二。

当然在while条件里写 divisor < 0 时候我还是有些疑虑的……

int countDigitOne(int n) {
    if(n <= 0) return 0;

    int sum = 0;
    int add_unit = 1;
    int remain = 0;
    int quotient = n;

    while(quotient > 0 ){
        int cur_digit, divisor;
        divisor = add_unit*10;
        if(quotient > 9){
            quotient = n/divisor;
        }
        else{
            quotient = 0;
        }
        cur_digit = (n/add_unit)%10;

        sum += quotient * add_unit;

        if(cur_digit >= 2){
            sum += add_unit;
        }
        else if (cur_digit ==1)
        {
            sum += remain + 1;
        }

        remain = n%divisor;
        add_unit *= 10;
    };

    return sum;
}

后来看见有人用long long类型,胸中顿时有千万匹可爱的小动物奔驰而过……

时间: 2024-10-27 09:05:19

溢出之后的相关文章

Tomcat内存溢出解决办法

使用Java程序从数据库中查询大量的数据时出现异常:java.lang.OutOfMemoryError: Java heap space在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息.JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4.可以利用JVM提供的-Xmn -Xms -Xmx等

如何将超级大(肯定溢出)的数用数组来表示

算法原理:以2^10000为例 在最高数组位以2的幂次相乘,当最高位>10,将高位保存在低一位的数组中2^5 在数组中以23形式保存,最后以反向输出 /*在程序中如果要是表示2^1000次方形式,明显肯定溢出,如果用数组形式表示嗯*/ #include<stdlib.h> #include<stdio.h> #define ARRAY_LEN 4000 int main() { int ar[ARRAY_LEN]={0}; int i,j,print_flag=0,jinw;

jvm 内存溢出 在myeclipse中加大tomcat的jvm内存 java.lang.OutOfMemoryError: PermGen space

使用myeclipse启动部署在tomcat7下的三个项目报出java.lang.OutOfMemoryError: PermGen space 解决办法: 在myeclipse中加大jvm内存方法:Window->Preferences->Myeclipse->Services->Tomcat->Tomcat 6.x->JDK,在Optional Java VM arguments:下边的输入框里输入:-Xms128m -Xmx512m -XX:PermSize=12

Reverse Integer - 反转一个int,溢出时返回0

Reverse Integer Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 若反转的数溢出,直接返回0 可以用计算结果来判断溢出,也可以用因数来判断 Java代码实现: 1 public class ReverseInteger { 2 public static int reverseInt(int x){ 3 if (x == 0) { 4 return

有效解决Android加载大图片时内存溢出的问题

首先解析一下基本的知识: 位图模式,bitmap颜色位数是1位 灰度模式,bitmap颜色位数是8位,和256色一样 RGB模式,bitmap颜色位数是24位 在RGB模式下,一个像素对应的是红.绿.蓝三个字节 CMYK模式,bitmap颜色位数是32位  在CMYK模式下,一个像素对应的是青.品.黄.黑四个字节 图像文件的字节数(Byte) = 图像分辨率*颜色深度/8(bit/8) 例如:一幅640*480图像分辨率.RGB色一般为24位真彩色,图像未经压缩的数据容量为:640X480X24

记一次java程序内存溢出问题

一个自然语言处理程序,在封装为web-service后,部署到线上运行. 但最近出现了内存溢出的情况,频繁的out of memory. 先盲目尝试在启动脚本中增加-XX:-UseGCOverheadLimit. 因为根据原因未找到,依然频繁的out of memory,只能一直观察jstat -gcutil <pid>,看到老生代内存降不下来时,重启程序. 服务程序很简单,简单接收参数,自然语言处理,返回数据,除了自然语言处理模块,都是方法参数,不会出现内存泄漏的情况. 第一次解决这种内存溢

java堆溢出

在Eclipse 配置运行参数或者在命令行中加上参数 eclipse 安装MAT插件,使用. 虚拟机栈内存溢出: 创建很多线程导致内存溢出,可以减少最大堆和减少栈容量. 方法区和运行时常量池溢出 在jdk1.6中intern()方法会把首次遇到的字符串实例复制到永久代.而由StringBuilder创建的字符串实例在java堆上,所以不是同一个引用.而JDK1.7的实现知识在常量池中记录首次出现的引用."java"这个字符串在执行之前就已经出现过了. 方法区溢出 大量产生java类的应

Webloginc 内存溢出解决方法

  Webloginc 内存溢出解决方法  : javax.servlet.ServletException: java.lang.OutOfMemoryError: PermGen space 解决方法: 1.在base_domain 域下找到startWebLogic.bat 文件,然后打开编辑, 2.然后加入以下的代码 JAVA_OPTS='-Xms512m -Xmx2048m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=25

深入理解java虚拟机学习 笔记 第二章 java 内存区域和内存溢出异常

2.2 运行时区域 java虚拟机划分成若干个不同的数据区域, 1.程序计数器,字节码解释器工作时就是通过改变计数器的值来取吓一跳需要执行的字节码命令 了解 String.intern()方法 作用: 如果字符串常量池中一个包含了一个等于此String对象的字符串,则返回代表池中的这个字符串的String对象,否则将此对象包含的字符串添加到常量池中,并返回此String对象的引用. 实战 将堆的最小值 -Xms参数与最大值-Xmx参数设置为一样即可避免堆自动扩展  通过参数 -XX:+HeapD

Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结

最近老是遇见服务器内存溢出的问题,故在网上搜了搜,总结了一些java内存溢出的解决方式 java.lang.OutOfMemoryError这个错误我相信大部分开发人员都有遇到过,产生该错误的原因大都出于以下原因:JVM内存过小.程序不严密,产生了过多的垃圾. 导致OutOfMemoryError异常的常见原因有以下几种: 内存中加载的数据量过于庞大,如一次从数据库取出过多数据: 集合类中有对对象的引用,使用完后未清空,使得JVM不能回收: 代码中存在死循环或循环产生过多重复的对象实体: 使用的