加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱故事小小网_铜陵站长网 (http://www.0562zz.com/)- 视频终端、云渲染、应用安全、数据安全、安全管理!
当前位置: 首页 > 大数据 > 正文

大数运算之加法

发布时间:2021-01-20 10:34:07 所属栏目:大数据 来源:网络整理
导读:大数运算之加法: 思路: 1.一次性输入大数,利用for循环读入缓冲区数据,当读到回车符时结束,将char型转化为int型数据,char-'0'=int 2.倒置数组。因为是累加填入数组,运算时从低位开始,而实际运算是从右边开始的,方便进位。采用对折 /2交换元素,无

大数运算之加法:

思路:

1.一次性输入大数,利用for循环读入缓冲区数据,当读到回车符时结束,将char型转化为int型数据,char-'0'=int

2.倒置数组。因为是累加填入数组,运算时从低位开始,而实际运算是从右边开始的,方便进位。采用对折 /2交换元素,无需考虑奇偶数。

3.长度对齐。长度不同时,可以直接将较长数组的低位加上进位直接赋值。

4.进位。%10 /10 操作,分别得到原位置的值,与进位值。然后加上进位值得到最终值

5.输出。需倒序输出。

源代码:

#include<stdio.h>
int a[1000]= {0};
int b[1000]= {0};
int main() {
       charinput;
       inti=0,aNum,bNum,carry=0;
       printf("输入第一个数:");
       for(i=0;;i++) {
              scanf("%c",&input);
              a[i]=input-'0';
 
              if(input=='n'){
                     i--;
                     break;
              }
       }
       aNum=i+1;
       printf("输入第二个数:");
       for(i=0;;i++) {
              scanf("%c",&input);
              b[i]=input-'0';
              if(input=='n'){
                     i--;
                     break;
              }
       }
       bNum=i+1;
       for(i=0;i<aNum/2; i++) {
              inttemp=a[i];
              a[i]=a[aNum-1-i];
              a[aNum-1-i]=temp;
       }
       for(i=0;i<bNum/2; i++) {
              inttemp=b[i];
              b[i]=b[bNum-1-i];
              b[bNum-1-i]=temp;
       }
       if(aNum==bNum){
              for(i=0;i<bNum; i++) {
                     inttemp1=(a[i]+b[i]+carry)%10;
                     inttemp2=(a[i]+b[i]+carry)/10;//进位
                     a[i]=temp1;
                     carry=temp2;
              }
              if(carry>0){
                     aNum++;
                     a[aNum-1]=carry;
              }
       }else if(aNum>bNum) {
              for(i=0;i<bNum; i++) {
                     inttemp1=(a[i]+b[i]+carry)%10;
                     inttemp2=(a[i]+b[i]+carry)/10;//进位
                     a[i]=temp1;
                     carry=temp2;
              }
              for(i=bNum;i<aNum; i++) {
 
                     inttemp2=(a[i]+carry)/10;//进位
                     a[i]=(a[i]+carry)%10;
                     carry=temp2;
                    
              }
              if(carry>0){
                     aNum++;
                     a[aNum-1]=carry;
              }
       }else {
              for(i=0;i<aNum; i++) {
                     inttemp1=(a[i]+b[i]+carry)%10;
                     inttemp2=(a[i]+b[i]+carry)/10;//进位
                     b[i]=temp1;
                     carry=temp2;
              }
              for(i=aNum;i<bNum; i++) {
 
                     inttemp2=(b[i]+carry)/10;//进位
                     b[i]=(b[i]+carry)%10;
                     carry=temp2;
              }
              if(carry>0){
                     bNum++;
                     b[bNum-1]=carry;
              }
       }
       if(aNum==bNum){
              for(i=aNum-1;i>=0; i--)
                     printf("%d",a[i]);
       }else if(aNum>bNum) {
              for(i=aNum-1;i>=0; i--)
                     printf("%d",a[i]);
       }else {
              for(i=bNum-1;i>=0; i--)
                     printf("%d",b[i]);
       }
       return0;
}


编译信息:

Compiling single file...

--------

- Filename: D:dev++add1.cpp

- Compiler Name: TDM-GCC 4.9.2 64-bitRelease

?

Processing C++ source file...

--------

- C++ Compiler:E:Dev-CppMinGW64bing++.exe

- Command: g++.exe"D:dev++add1.cpp" -o "D:dev++add1.exe"? -I"E:Dev-CppMinGW64include"-I"E:Dev-CppMinGW64x86_64-w64-mingw32include"-I"E:Dev- CppMinGW64libgccx86_64-w64-mingw324.9.2include"-I"E:Dev-CppMinGW64libgccx86_64-w64-mingw324.9.2includec++"-L"E:Dev-CppMinGW64lib"- L"E:Dev-CppMinGW64x86_64-w64-mingw32lib" -static-libgcc

?

Compilation results...

--------

- Errors: 0

- Warnings: 0

- Output Filename: D:dev++add1.exe

- Output Size: 129.63671875 KiB

- Compilation Time: 0.34s

测试数据:

输入第一个数:87687617865716765863475671649750184895789346576

输入第二个数:87458173475673647561083469576876746736787676790610834

87458261163291513277849333052548396486972572579957410

--------------------------------

Process exited after 17.07 seconds withreturn value 0

请按任意键继续. . .

版权声明:

著作权归作者所有?。?
商业转载请联系作者获得授权,非商业转载请注明出处。?
本文作者:Joe.Smith

发表日期:2016年10月9日?
本文链接:http://www.voidcn.com/article/p-faoainnr-bdx.html

来源:CSDN?
更多内容:大数运算之阶乘

(编辑:我爱故事小小网_铜陵站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读