洛谷题目难度都是假的
读入:第一个用string读,判断是否是a,b,c,不是就用进制转换转成十进制数
位数:负数的负号也算一个!0也算一位!(特判或用dowhile)
下面是代码(没有写成子程序所以代码有重复之处,不要嫌长)
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int t;
string last=" ";//存储上一个运算符号
int main(){
cin>>t;
while(t--){
string x;int a,b;
cin>>x;//用字符串先读第一个
if(x=="a"||x=="b"||x=="c"){//是运算符号
cin>>a>>b;//正常读入
}
else {
for(int i=0;i<x.size();i++)
a+=(x[i]-48)*pow(10,x.size()-i-1);
// 变成数字 根据位数来算该数字是个十百···位
cin>>b;//读入第二个数字
x=last;//取出上一个运算符号
}
last=x;//更新
if(x=="a"){
cout<<a<<'+'<<b<<'='<<a+b<<endl;
int sum=0;
int c=a+b//必须写在前面,不然都是0。下同
do{//使得即使是0,sum也先加上1,下同
sum++;
a/=10;
}while(a);
sum+=1;//运算符号算一位
do{
sum++;
b/=10;
}while(b);
sum+=1;//等于号
do{
sum++;
c/=10;
}while(c);
cout<<sum<<endl;
}
else if(x=="b"){
cout<<a<<'-'<<b<<'='<<a-b<<endl;
int sum=0;
int c=a-b;
if(c<0)sum+=1;//处理负号
do{
sum++;
a/=10;
}while(a);
sum+=1;
do{
sum++;
b/=10;
}while(b);
sum+=1;
do{
sum++;
c/=10;
}while(c);
cout<<sum<<endl;
}
else if(x=="c"){
cout<<a<<'*'<<b<<'='<<a*b<<endl;
int sum=0;
int c=a*b;
do{
sum++;
a/=10;
}while(a);
sum+=1;
do{
sum++;
b/=10;
}while(b);
sum+=1;
do{
sum++;
c/=10;
}while(c);
cout<<sum<<endl;
}
}
return 0;
}