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