大数运算之加法:
思路:
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?
更多内容:大数运算之阶乘