问题 A: 【高精度】简单计算
时间限制: 1 Sec 内存限制: 128 MB
[提交] [状态]题目描述
计算机的基本功能是计算,作为一个计算机爱好者,Ivy当然知道如何编写一个计算机程序,让计算机能进行简单的计算。
之所以简单,因为Ivy的程序只需根据输入的两个正整数,根据要求计算这两个数的和或者差即可(所有输入数据确保x>=y)。输入
输入共有三行。第一行包含一个正整数x,第二行包含一个正整数y,第三行包含一个算术运算符(加号或者减号)。
输出
只有一行,表示将输入的两个正整数根据运算符进行计算后所得结果(两数之和或者之差)。
样例输入 Copy
251 249 +
样例输出 Copy
500
提示
对于60%的数据,1<=x,y<=16383;
对于80%的数据,1<=x,y<=1073741823;
对于90%的数据,1<=x,y<=4*1019
对于100%的数据,1<=x,y<=1030。
错误版本:
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N=2e5+5;
map <string,int> mp;
int A[55],B[55],sum[55];
int main()
{
char s[55];
char t[55];
char ch;
scanf("%s",s);
scanf(" %s",t);
scanf(" %c",&ch);
int len1=strlen(s);
int len2=strlen(t);
int maxn=max(len1,len2)+1;
int cnt=0;
for(int i=0;i<maxn;i++)
{
if(i<maxn-len1) A[i]=0;
else A[i]=s[cnt++]-'0';
}
cnt=0;
for(int i=0;i<maxn;i++)
{
if(i<maxn-len2) B[i]=0;
else B[i]=t[cnt++]-'0';
}
// for(int i=0;i<maxn;i++)
// {
// printf(" %d",A[i]);
// }
// puts("\n");
// for(int i=0;i<maxn;i++)
// {
// printf(" %d",B[i]);
// }
if(ch=='+')
{
for(int i=maxn;i>=0;i--)
{
if(i>=1)sum[i-1]+=(sum[i]+A[i]+B[i])/10;
sum[i]=(sum[i]+A[i]+B[i])%10;
}
}
if(ch=='-')
{
// for(int i=0;i<=maxn;i++)
// printf(" %d",A[i]);
// puts("\n");
// for(int i=0;i<=maxn;i++)
// printf(" %d",B[i]);
for(int i=maxn;i>=0;i--)
{
sum[i]=(A[i]-B[i]);
}
for(int i=maxn;i>=0;i--)
{
if(sum[i]<0)
{
sum[i-1]--;
sum[i]+=10;
}
}
}
int f=0;
for(int i=0;i<maxn;i++)
{
if(f==0&&sum[i]==0) continue;
f=1;
printf("%d",sum[i]);
}
return 0;
}
/**************************************************************
Problem: 8702
User: 2019UPC110
Language: C++
Result: 答案错误
****************************************************************/
正确版本:考虑 99 99 -
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N=2e5+5;
map <string,int> mp;
int A[55],B[55],sum[55];
int main()
{
char s[55];
char t[55];
char ch;
scanf("%s",s);
scanf(" %s",t);
scanf(" %c",&ch);
int len1=strlen(s);
int len2=strlen(t);
int maxn=max(len1,len2)+1;
int cnt=0;
for(int i=0;i<maxn;i++)
{
if(i<maxn-len1) A[i]=0;
else A[i]=s[cnt++]-'0';
}
cnt=0;
for(int i=0;i<maxn;i++)
{
if(i<maxn-len2) B[i]=0;
else B[i]=t[cnt++]-'0';
}
// for(int i=0;i<maxn;i++)
// {
// printf(" %d",A[i]);
// }
// puts("\n");
// for(int i=0;i<maxn;i++)
// {
// printf(" %d",B[i]);
// }
if(ch=='+')
{
for(int i=maxn;i>=0;i--)
{
if(i>=1)sum[i-1]+=(sum[i]+A[i]+B[i])/10;
sum[i]=(sum[i]+A[i]+B[i])%10;
}
}
if(ch=='-')
{
// for(int i=0;i<=maxn;i++)
// printf(" %d",A[i]);
// puts("\n");
// for(int i=0;i<=maxn;i++)
// printf(" %d",B[i]);
for(int i=maxn;i>=0;i--)
{
sum[i]=(A[i]-B[i]);
}
for(int i=maxn;i>=0;i--)
{
if(sum[i]<0)
{
sum[i-1]--;
sum[i]+=10;
}
}
}
int f=0;
for(int i=0;i<maxn;i++)
{
if(f==0&&sum[i]==0) continue;
f=1;
printf("%d",sum[i]);
}
if(f==0) printf("0");
return 0;
}
/**************************************************************
Problem: 8702
User: 2019UPC110
Language: C++
Result: 正确
Time:1 ms
Memory:2024 kb
****************************************************************/