求助各位大佬,60分,C++
查看原帖
求助各位大佬,60分,C++
367851
penguin_cpp楼主2021/2/26 10:54

样例:

4
a 64 46
275 125
c 11 99
b 46 64

程序输出:

64+46=110
9
2702+125=2827
13
11*99=1089
10
46-64=-18
9

好端端的 275 咋就成了 2702 了呢? 代码献上:

#include <iostream>
#include <cstdio>
using namespace std;
struct yunsuan
{
	string yunsuanfu;	// 运算符,第一个输入的数字 
	int d2,d3;	// 第二个和第三个输入的运算数字
};
int main()
{
	/*  定义部分  */ 
	int n;	// n 行
	yunsuan ys[55];	// 定义 yunsuan 结构体输入 ys 
	int jieguo;	// 运算结果 
	int b=0;	// 计数器 ,字符数 
	
	/*  输入部分  */	
	cin>>n;	// 输入 n 
	for(int i=0; i<n; i++)	// 输入 n 行部分 
	{
		cin>>ys[i].yunsuanfu>>ys[i].d2;	// 输入 ys[i].yunsuanfu 和  ys[i].d2
		if(getchar()=='\n')	// 如果换行了 
		{
			ys[i].d3=ys[i].d2;	// 将 ys[i].d3 赋值为  ys[i].d2
			ys[i].d2=0;	// 将 ys[i].d2 清零,不影响 for 内部乘 10 
			for(int k=0; k<sizeof(ys[i].yunsuanfu); k++)
			{
				ys[i].d2*=10;
				ys[i].d2+=ys[i].yunsuanfu[k]-48;
			}	// 将 ys[i].d2 赋值为  ys[i].yunsuanfu 的数字 
			ys[i].yunsuanfu=ys[i-1].yunsuanfu;
			continue;	// 跳出本次循环 
		}
		cin>>ys[i].d3;	// 否则,输入  ys[i].d3
	}
	
	/* 输出部分 */
	for(int i=0; i<n; i++) 
	{
		b=2;	// + 和 = 用的空间 
		cout<<ys[i].d2;	// 第一个运算数字
		switch(ys[i].yunsuanfu[0]) 
		{
			case 'a':cout<<'+';jieguo=ys[i].d2+ys[i].d3;break;
			case 'b':cout<<'-';jieguo=ys[i].d2-ys[i].d3;break;
			case 'c':cout<<'*';jieguo=ys[i].d2*ys[i].d3;break;
		}	// 运算符,结果 
		cout<<ys[i].d3;	// 第二个运算数字
		cout<<'=';	// =号 
		cout<<jieguo<<endl;	// 结果,换行 
		do
		{
			ys[i].d2/=10;
			b++;
		}while(ys[i].d2!=0);	// 第一个运算数字用的空间 
		do
		{
			ys[i].d3/=10;
			b++;
		}while(ys[i].d3!=0);	// 第二个运算数字用的空间 
		if(jieguo<0)	// 如果结果小于0 
			b++;	// 一定有 - 号  
		do
		{
			jieguo/=10;
			b++;
		}while(jieguo!=0);	// 结果用的空间 
		cout<<b<<endl;	// 输出字符数 
	}
	return 0;
}

感觉问题是在

for(int k=0; k<sizeof(ys[i].yunsuanfu); k++)
			{
				ys[i].d2*=10;
				ys[i].d2+=ys[i].yunsuanfu[k]-48;
			}	// 将 ys[i].d2 赋值为  ys[i].yunsuanfu 的数字 

看了好长时间死活看不出来(可能是我太菜了...) 有木有能看出来的大佬,help!

2021/2/26 10:54
加载中...