洛谷 P1957 【口算练习题】

洛谷题目难度都是假的

读入:第一个用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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值