今天见到的代码,是一个普及-的类型的,虽然思路清晰,不过,我这个老是在实现的时候出错,这个习惯真的不好,,,下面是题目:
着实捉急呢,这个东西,我的构思,大致分三块:
1、存储数据的2个数组:一个char类型的,大小为50;另外一个是int类型,大小为100,刚好存着这个需要的两个运算符
2、判断这个输入的字符是哪一个a 或b或c ,然后分别输出里面需要的结果模式,对于小于0的数,在输出的结果上加一即可。
3、将每一个输入的运算数给判断为几位数,然后使用在2里面的判断中。
苦思冥想,两个数组,两个判断条件,再加上一个一个函数,这已经是最简单的算法,而且不会出错的那种了,我的代码如下:
#include<iostream>
#include<string>
using namespace std;
char a[50];
int b[100];
int F(int x) {
int n = 1;
while (x / 10 != 0) {
n++;
x = x / 10;
}
return n;
}
int main()
{
int i;
cin >> i;
for (int m = 0 ,r=0; m < i; m++) {
cin >> a[m] >> b[r] >> b[r + 1];
}
for (int r = 0,m=0; m < i;m++,r=r+2){
if (a[m] == 'a') { cout << b[r] << "+" << b[r + 1] << "=" << b[r] + b[r + 1] << endl; cout << F(b[r]) + F(b[r + 1]) + F(b[r] + b[r + 1]) + 2 << endl; }
if (a[m] == 'b') {
cout << b[r] << "-" << b[r + 1] << "=" << b[r] - b[r + 1] << endl;
if (b[r] - b[r + 1] < 0) { cout << F(b[r]) + F(b[r + 1]) + F(b[r] + b[r + 1]) + 3 << endl; }
cout << F(b[r]) + F(b[r + 1]) + F(b[r] + b[r + 1]) + 2 << endl;
}
if (a[m] == 'c') { cout << b[r] << "*" << b[r + 1] << "=" << b[r] * b[r + 1] << endl; cout << F(b[r]) + F(b[r + 1]) + F(b[r] + b[r + 1]) + 2 << endl; }
else{
if (a[m-1] == 'a') { cout << b[r] << "+" << b[r + 1] << "=" << b[r] + b[r + 1] << endl; cout << F(b[r]) + F(b[r + 1]) + F(b[r] + b[r + 1]) + 2 << endl; }
if (a[m-1] == 'b') {
cout << b[r] << "-" << b[r + 1] << "=" << b[r] - b[r + 1] << endl;
if(b[r]-b[r+1]<0){ cout << F(b[r]) + F(b[r + 1]) + F(b[r] + b[r + 1]) + 3 << endl; }
cout << F(b[r]) + F(b[r + 1]) + F(b[r] + b[r + 1]) + 2 << endl;
}
if (a[m-1] == 'c') { cout << b[r] << "*" << b[r + 1] << "=" << b[r] * b[r + 1] << endl; cout << F(b[r]) + F(b[r + 1]) + F(b[r] + b[r + 1]) + 2 << endl; }
}
}
return 0;
}
错误还是没有找出来。。