【章某鱼的学习笔记】大数相加+大数相乘
本帖最后由 1234567章鱼君 于 2019-11-9 17:55 编辑#include<bits/stdc++.h>
using namespace std;
const int MAX=1e4; //定义数字最大位数
char A,B; //存放数字
int ans={0}; //存放相加结果
void Swap(char *A,int n)
{
for(int i=0,j=n-1;i<j;j--,i++)
swap(A,A); //字符串逆序
}
int main()
{
scanf("%s%s",A,B); //以字符串的方式存放数字
int m=strlen(A);
Swap(A,m);
int n=strlen(B);
Swap(B,n);
for(int i=0;i<m;i++)
ans=ans+(A-'0'); //每一位数字相加存放ans中
for(int i=0;i<n;i++)
ans=ans+(B-'0');
int i;
for(i=0;i<MAX;i++)
{
ans=ans+ans/10;
ans=ans%10;
}
for(i=MAX-1;i>=0;i--) //判断ans长度
if(ans)
break;
for(i=i;i>=0;i--)
cout<<ans; //从后往前倒序输出
cout<<endl;
return 0;
} 改了一下
第一次发的时候没发现100+100这样的式子无法运算
用大数相乘测试的时候才发现这个bug 本帖最后由 1234567章鱼君 于 2019-11-9 17:59 编辑
大数相乘
#include<bits/stdc++.h>
using namespace std;
const int MAX=2e4;
char A,B;
int ans={0};
void Swap(char *A,int n)
{
for(int i=0,j=n-1;i<j;i++,j--)
swap(A,A);
}
int main()
{
scanf("%s%s",A,B);
int m=strlen(A);
Swap(A,m);
int n=strlen(B);
Swap(B,n);
for(int i=0;i<m;i++) //A中的每一位数与B的每一位数相乘
for(int j=0;j<n;j++) //并存放在A与B位数之和的ans的位置上
ans=ans+(A-'0')*(B-'0');
int i;
for(i=0;i<MAX;i++)
{
ans=ans+ans/10;
ans=ans%10;
}
for(i=MAX-1;i>=0;i--) //判断ans长度
if(ans)
break;
for(;i>=0;i--)
cout<<ans;
cout<<endl;
return 0;
} 楼上(对!就是我!)际遇也太惨了
页:
[1]