设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 数据 创业者 手机
当前位置: 首页 > 大数据 > 正文

大数运算之加法

发布时间:2021-01-17 20:38 所属栏目:125 来源:网络整理
导读:大数运算之加法: 思路: 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-Cpp\MinGW64\bin\g++.exe

- Command: g++.exe"D:\dev++\add1.cpp" -o "D:\dev++\add1.exe"? -I"E:\Dev-Cpp\MinGW64\include"-I"E:\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include"-I"E:\Dev- Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include"-I"E:\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++"-L"E:\Dev-Cpp\MinGW64\lib"- L"E:\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib" -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?
更多内容:大数运算之阶乘

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读