1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 大数运算--加法

大数运算--加法

时间:2024-04-02 19:10:17

相关推荐

大数运算--加法

引言

由于整型数的位数有限,因此整型数不能满足大整数(超长整数)的运算要求 ,大整数计算是利用字符串来表示大整数,即用字符串的一位字符表示大整数的一位数值,然后根据四则运算规则实现大整数的四则运算

思想

1.先用两个字符数组来存储输入的大数

2.我们可以确定结果的位数一定不会比输入的最大位数的大数的位数+1还要多

3.根据数组存储数据的特性,比如一个8位数,个位数在num[7]的位置,所以我们要进行倒序相加,进行逢十进一也是利用循环,倒序相加

4.但是要注意,只有当两个数都有的时候才相加,一个数不存在的时候,直接写入结果

5.最后判断存储结果的数组的第一位是不是0,如果是,则证明位数没有改变,则每一位要前挪一位

6.不管用不用前挪,我们都要在结果的最后加’\0’,以至于能当成字符串输出

代码实现

#include<stdio.h>#include<string.h>int main(){char num1[1005]={0},num2[1005]={0},num[1005]={0};int len1,len2,len;//长度int i;printf("请输入第一个数\n");scanf("%s",num1);getchar();printf("请输入第二个数\n"); scanf("%s",num2);getchar();//计算两个数的位数以及结果的最大位数 2len1=strlen(num1);len2=strlen(num2);len=len1>len2?len1:len2;len++;//倒序相加直到小的数被加完为止 for(i=0;i<len1&&i<len2;i++)num[len-1-i]=(num1[len1-1-i]-'0')+(num2[len2-1-i]-'0');//找出大的数直接赋值进result if(len1>len2){for(;i<len1;i++)num[len-1-i]=num1[len1-1-i]-'0';}else{for(;i<len2;i++)num[len-1-i]=num2[len2-1-i]-'0';}//倒序判断,逢十进一for(i=len-1;i>0;i--){if(num[i]>=10){num[i]=num[i]%10;num[i-1]++;}}//判断相加有没有使最大位数改变,如果没有就要前移一位if(num[0]==0){for(i=1;i<len;i++){num[i-1]=num[i]+'0';}num[len-1]='\0';} else{for(i=0;i<len;i++){num[i]=num[i]+'0';}num[len]='\0';}printf("两个数相加的结果是:\n");puts(num);return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。