PAT 2021.4.20.1. 正整数A+B
原题链接
简单
作者:
DPH
,
2021-04-21 21:24:55
,
所有人可见
,
阅读 351
#include <iostream>
#include <string>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
int quick_pow(int base, int power)
{
int result = 1;
while(power)
{
if(power & 1)
{
result = result * base;//如果求后三位 那就mod1000
}
power >>= 1;
base = base * base;//如果求后三位 那就mod1000
}
return result;
}
int main()
{
string s; getline(cin, s);
int ls = s.size();
int vis = -1; bool f1 = 0; bool f2 = 0;
if(s[0] == '-' || s[0] == '0') f1 = 1;//负数
for(int i = 0; i < ls; i++)
{
if(s[i] == ' ')
{
vis = i; break;
}
if(s[i] == '.') f1 = 1;//小数
else if(s[i] < '0' || s[i] > '9') f1 = 1;//乱码
else if(i > 3) f1 = 1;
else if(i == 3 && s[0] > '1') f1 = 1;
else if(i == 3 && s[0] == '1' && (s[1] != '0' || s[2] != '0' || s[3] != '0')) f1 = 1;
}
if(vis == 0)
{
f1 = 1;
vis++;
}
if(s[vis + 1] == '-' || s[vis + 1] == '0') f2 = 1;
for(int i = vis + 1, j = 0; i < ls; i++, j++)
{
if(s[i] == '.') f2 = 1;
else if(s[i] < '0' || s[i] > '9') f2 = 1;//乱码
else if(j > 3) f2 = 1;
else if(j == 3 && s[vis + 1] > '1') f2 = 1;
else if(j == 3 && s[vis + 1] == '1' && (s[vis + 2] != '0' || s[vis + 3] != '0' || s[vis + 4] != '0')) f2 = 1;
}
if(f1 && f2) cout<<"? + ? = ?\n";
else if(f1)
{
cout<<"? + ";
for(int i = vis + 1; i < ls; i++) cout<<s[i];
cout<<" = ?\n";
}
else if(f2)
{
for(int i = 0; i < vis; i++) cout<<s[i];
cout<<" + ? = ?\n";
}
else
{
int na = 0; int nb = 0;
for(int i = vis - 1, j = 0; i >= 0; i--, j++)
{
int t = s[i] - '0';
na += t * quick_pow(10, j);
}
for(int i = ls - 1, j = 0; i >= vis + 1; i--, j++)
{
int t = s[i] - '0';
nb += t * quick_pow(10, j);
}
cout<<na<<" + "<<nb<<" = "<<na + nb<<'\n';
}
return 0;
}