当前位置: 首页 > 编程技术 > 正文

大数求余求商的解决方法

很多时候我们需要用到大数运算,这里举一个数字:0x112C6CCBB 转换成十进制就是

double a=4609985723

这是一个大数了,因为他超过了int所能表示的最大整数:4294967296

那么如果是我要对这个进行求商和求余怎么办?这里的求商是指和整形求商一样,求出的商是整数而不是小树

首先是大数的表示问题,这个大数可以用double来表示,因为double能够表示的范围是相当大的,

那么:

double a =4609985723;

首先是求商,因为c语言的除法运算符规定了至少有一个int型,但是这样的如果除数或者是被除数中有其他类型的数据的话,如果接受的变量为int型的话,那么结果为整形,如果为double或者是float的话,那么为浮点型,也就是可能出现小数:

double a =4609985723;
int b=685667;
int c = a/b;
double d = a/b;

结果是c为整数,d为小数,这样就可以解决大数的求商问题了

大数求余问题:
和前面的一样,C语言里面的求余符号规定了两个变量必须都是int,也就是说,下面的代码在C中是会报错的:

double a =4609985723;
int b=685667;
int c = a%b;

编译器会提示%的左边不能为double型,但是如果不用double型而是用强制类型转换为int的话,因为要转换得数超过了int所能表达的最大的数。那么强制类型转换将导致数据的丢失和错误,那么怎么解决勒?

我们来回忆下求余的步骤,余数有个特点就是比除数小,那么也就是说除数的若干倍加上余数就等于被除数

那么求余实际上就是在累减,直到差小于减数为止,因此根据求余是累减的思想,那么大数求余可以使用下面的代码实现:

double a =4609985723;
int b=685667;
while(1){
a= a-b;  //累减
if(a<=b){  //如果是a小于b的话,说明可以理解为a就是余数了
break;  //终止循环
}
}

这样以来就可以解决大数的求余问题了



本文固定链接: http://kuaile.in/archives/816 | 蒲公英的博客

该日志由 蒲公英 于2012年04月08日发表在 编程技术 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 大数求余求商的解决方法 | 蒲公英的博客
关键字:

大数求余求商的解决方法:等您坐沙发呢!

发表评论


You must enable javascript to see captcha here!

快捷键:Ctrl+Enter