P1957 口算練習題
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN2XjlGcjAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL10kaOhXTq5EeVpHW3BjMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmL4kzN3ITMxIjM2AjMwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
輸入輸出樣例
輸入
4
a 64 46
275 125
c 11 99
b 46 64
輸出
64+46=110
9
275+125=400
11
11*99=1089
10
46-64=-18
9
代碼如下(看了題解):
#include <bits/stdc++.h>
using namespace std;
char s[20],num[200],k;
int main()
{
int n,i,x,y;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",&s);
if(isalpha(s[0]))
{
k=s[0];
scanf("%d%d",&x,&y);
}
else
{
x=atoi(s);
scanf("%d",&y);
}
if(k=='a') sprintf(num,"%d+%d=%d",x,y,x+y);
else if (k=='b')sprintf(num,"%d-%d=%d",x,y,x-y);
else sprintf(num,"%d*%d=%d",x,y,x*y);
printf("%s\n%d\n",num,strlen(num));
}
return 0;
}
1、
isalpha(s[0])
的作用:
輸入完第一個數字之後,開始輸入字元串。
isalpha()的意思是如果括号裡的字元串是字母則傳回非0數,如果不是字母傳回0。
在這裡,如果是字母的話,記錄下字母友善後面判斷。
如果不是字母,用到第二個函數。
2、
atoi(s)
的作用:
atoi(s)是把括号裡的字元串變成整數的函數。
如果輸入的字元串判斷出來不是a or b or c,那麼就是“與上一題運算類型相同的情況”,就把這個字元串(其實是數字)轉換成整數。
然後再輸入一個整數。
3、
sprintf(num,"%d+%d=%d",x,y,x+y)
的作用:
一個和printf長得很像的函數。
sprintf(num,"%d+%d=%d",x,y,x+y)的作用把後面x+y=m這一串東西搞成一個字元串儲存進num這個字元串數組。(因為題目要求一整個運算式的長度)。
當然搞進去之後他不會輸出,是以最後還要printf輸出。