高精度运算总结(让我慢慢更新10.16)
|
起首抛出题目,给定两个几十万位的数,输出他们加减乘除的运算功效。 说明:对付这类题目,不要指望int double这些对象了,根基数据范例不行能存的下。我们可以把这两个数当成字符串输入到数组中,然后模仿手动的竖式运算(不会的话,归去上小学)得出功效。 应用:任意什么工程计较要求准确到小数点后十万位,可能运算数直接就有十万位,这些环境太常见了吧。貌似windows的计较器就是回收高精度运算,不信去试试。 暂定的写作次序如下 整数加法给定两个数989和9889来模仿一下大整数加法的实现进程(请先手动做一下竖式计较)
char str_1[100];
char str_2[100];
memset(str_1,' ',sizeof(str_1));//初始化字符串为空
memset(str_2,sizeof(str_2));
scanf("%s%s",str_1,str_2);//字符串情势吸取两个数
int len_1=strlen(str_1);
int len_2=strlen(str_2);
int num_1[100];//两个数倒序装入整型数组筹备运算
int num_2[100];//为什么要倒叙?为了给进位留足空间
memset(num_1,0,sizeof(num_1));
memset(num_2,sizeof(num_2));
for(int i=0; i<len_1; i++)
num_1[len_1-i-1]=str_1[i]-'0';
for(int i=0; i<len_2; i++)
num_2[len_2-i-1]=str_2[i]-'0';
为什么用字符串数组吸取数据又转存到整型数组? 为什么要倒叙转存进整型数组? 2.运算并处理赏罚进位 int num[100];//存储运算功效
memset(num,sizeof(num));
int len=max(len_1,len_2);//运算功效的长度
for(int i=0; i<len; i++)
{
num[i]=num_1[i]+num_2[i]+num[i];//num[i]中也许存有前一位的进位
if(num[i]>=10)//假如必要进位
{
num[i]=num[i]-10;
num[i+1]++;//进位
}
}
3.去除前导零并输出 while(num[len]==0)//去除前导零
len--;
for(; len>=0; len--)
printf("%d",num[len]);
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

