题解:https://blog.csdn.net/qq_42835910/article/details/88959695
c语言的compare函数比较两字符串大小
1 //使用c语言的compare函数比较两字符串大小 返回值为-1,0,1 2 string s1 = "asd",s2 = "asd"; 3 int t = s1.compare(s2);//逐个比较字母,若t=-1,说明 s1<s2 ; 若t=1,说明 s1>s2 ; 若t=0,说明 s1=s2 ; 4 cout<<t<<endl;
思路:
使用两个函数:toNumber(string s,int c)、toString(long long n,int c) 对于toNumber(string s,int c)函数作用:将c进制的s2字符串转为10进制的数字 对于toString(long long n,int c)函数作用:将10进制的n数字转为c进制的字符串 对于该题,我们运算中的数字都转为10进制去运算,所以我们的数字平时都以10进制保存(输入s2之后,使用toNumber(s2,c)转为10进制) 当我们需要输出答案时,再将运算结果用c进制输出(toString(res,c))
代码:
#include<iostream> #include<algorithm> #include<cstdio> using namespace std; //将c进制的s2字符串转为10进制的数字 long long toNumber(string s,int c){ //c表示进制数 long long n = 0; int len = s.length(); for(int i = 0;i < len;i++){ if(isupper(s[i])) n = (s[i]-‘A‘+10)+n*c; else n = (s[i]-‘0‘)+n*c; } return n; } //将10进制的n数字转为c进制的字符串 string toString(long long n,int c){ if(n == 0) return "0"; long long m; string s; while(n){ m = n % c; if(m >= 10) s.push_back(m+‘A‘-10); else s.push_back(m+‘0‘); n /= c; } reverse(s.begin(), s.end()); return s; } int main(){ //n表示操作数,c表示当前进制单位,isclear标记前面的数是否被清除 //p表示操作符序号 int n,c = 10,p = 0,isclear = 1; cin >> n; //s1表示操作,s2表示数字 string s1,s2; long long res = 0,num; while(n--){ cin>>s1; if(s1.compare("NUM")==0){ cin>>s2; if(isclear){ //说明前面的数已经被清除 res = toNumber(s2,c);//说明s2为c进制的数,将s2转为10进制的数字 isclear = 0; } else{ num = toNumber(s2,c); } if(p){ if(p == 1) res += num; else if(p == 2) res -= num; else if(p == 3) res *= num; else if(p == 4) res /= num; else if(p == 5) res %= num; p=0; } } else if(s1.compare("CHANGE")==0){ cin>>c; } else if(s1.compare("EQUAL")==0){//平时计算都以10进制 cout<<toString(res,c)<<endl;//将res化为c进制 } else if(s1.compare("CLEAR")==0){ isclear = 1;//表示将前面的数清除 } else if(s1.compare("ADD")==0){ p=1; } else if(s1.compare("SUB")==0){ p=2; } else if(s1.compare("MUL")==0){ p=3; } else if(s1.compare("DIV")==0){ p=4; } else if(s1.compare("MOD")==0){ p=5; } } return 0; }
原文:https://www.cnblogs.com/Aiahtwo/p/12260047.html