1.计算A+B
输入:
第一行输入T,代表T组数据。
下面每组数据:
第一行输入0或1:0为输出整数,1为输出英文(英文只输出每一位代表的数字:如80则输出 eight zero). 输入输出的均为小写字母。第二行输入运算式子,形式为:A + B =(A,B可以都是整数,也可以都是英文,也可以A,B一个是整数,一个是英文。
输出:
每组数据输入后输出运算结果。
#include<iostream>
#include<string>
#include<algorithm>
#include<sstream>
#include<cmath>
using namespace std;
int e2d(string s)
{
int x = 0;
if(s.compare("zero")==0)
x = 0;
if(s.compare("one")==0)
x = 1;
if(s.compare("two")==0)
x = 2;
if(s.compare("three")==0)
x = 3;
if(s.compare("four")==0)
x = 4;
if(s.compare("five")==0)
x = 5;
if(s.compare("six")==0)
x = 6;
if(s.compare("seven")==0)
x = 7;
if(s.compare("eight")==0)
x = 8;
if(s.compare("nine")==0)
x = 9;
return x;
}
string d2e(int z)
{
string Z;
if(z==0)
Z ="zero";
if(z==1)
Z ="one";
if(z==2)
Z ="two";
if(z==3)
Z ="three";
if(z==4)
Z ="four";
if(z==5)
Z ="five";
if(z==6)
Z ="six";
if(z==7)
Z ="seven";
if(z==8)
Z ="eight";
if(z==9)
Z ="nine";
return Z;
}
int s2i (string a)
{
int X = 0;
stringstream ss;
ss<<a;
ss>>X;
return X;
}
int main()
{
int T = 0;
scanf("%d\n",&T);
while(T--)
{
int n = 0;
scanf("%d\n",&n);
string str;
getline(cin,str);
int arrA[100];
int arrB[100];
int A = 0;
int B = 0;
int count1 = 0;
int count2 = 0;
int loc = str.find('+');
int i = 0;
if(n==0)
{
for(i=0;i<loc;i++)
{
string find;
if(isalpha(str[i])!=0)
{
while(isalpha(str[i])!=0)
{
find.push_back(str[i]);
i++;
}
arrA[count1] = e2d(find);
count1 ++;
find.clear();
}
else if(isdigit(str[i])!=0)
{
while(isdigit(str[i])!=0)
{
find.push_back(str[i]);
i++;
}
arrA[count1] = s2i(find);
count1 ++;
find.clear();
}
}
for(i=0;i<count1;i++)
{
A = A+arrA[count1-i-1]*pow(10,i);
}
for(i=loc;i<str.length();i++)
{
string find;
if(isalpha(str[i])!=0)
{
while(isalpha(str[i])!=0)
{
find.push_back(str[i]);
i++;
}
arrB[count2] = e2d(find);
count2 ++;
find.clear();
}
else if(isdigit(str[i])!=0)
{
while(isdigit(str[i])!=0)
{
find.push_back(str[i]);
i++;
}
arrB[count2] = s2i(find);
count2 ++;
find.clear();
}
}
for(i=0;i<count2;i++)
{
B = B+arrB[count1-i-1]*pow(10,i);
}
cout<< A + B <<endl;
}
if(n==1)
{
for(i=0;i<loc;i++)
{
string find;
if(isalpha(str[i])!=0)
{
while(isalpha(str[i])!=0)
{
find.push_back(str[i]);
i++;
}
arrA[count1] = e2d(find);
count1 ++;
find.clear();
}
else if(isdigit(str[i])!=0)
{
while(isdigit(str[i])!=0)
{
find.push_back(str[i]);
i++;
}
arrA[count1] = s2i(find);
count1 ++;
find.clear();
}
}
for(i=0;i<count1;i++)
{
A = A+arrA[count1-i-1]*pow(10,i);
}
for(i=loc;i<str.length();i++)
{
string find;
if(isalpha(str[i])!=0)
{
while(isalpha(str[i])!=0)
{
find.push_back(str[i]);
i++;
}
arrB[count2] = e2d(find);
count2 ++;
find.clear();
}
else if(isdigit(str[i])!=0)
{
while(isdigit(str[i])!=0)
{
find.push_back(str[i]);
i++;
}
arrB[count2] = s2i(find);
count2 ++;
find.clear();
}
}
for(i=0;i<count2;i++)
{
B = B+arrB[count2-i-1]*pow(10,i);
}
int res = A+B;
int j = 0;
string out[100];
int k = 0;
while(res!=0)
{
j = res%10;
out[k]=d2e(j);
res = res/10;
k++;
}
for(i=k-1;i>=0;i--)
{
cout<<out[i];
if(i>0)
cout<<" ";
}
cout<<endl;
}
}
return 0;
}
2.有一个长度为 n 的整数序列。请写一个程序,把序列中的最小值与第一个数交换,最大值
与最后一个数交换。输出转换好的序列。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> vec1;
vector<int> vec2;
int n = 0;
cin>>n;
int i = 0;
while(n--)
{
int a = 0;
cin>>a;
vec1.push_back(a);
}
vec2 = vec1;
sort(vec2.begin(),vec2.end());
for(i=0;i<vec1.size();i++)
{
if(vec1[i]==vec2[0])
{
int tmp = 0;
tmp = vec1[0];
vec1[0]=vec1[i];
vec1[i]=tmp;
}
if(vec1[i]==vec2[vec2.size()-1])
{
int tmp = 0;
tmp = vec1[vec1.size()-1];
vec1[vec1.size()-1]=vec1[i];
vec1[i]=tmp;
}
}
for(i=0;i<vec1.size();i++)
{
cout<<vec1[i];
if(i<vec1.size()-1)
cout<<" ";
}
return 0;
}
3.输出 100-200 之间的素数。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int i = 0;
for(i=100;i<200;i++)
{
int j = 0;
for(j=2;j<sqrt(i);j++)
{
if(i%j==0)
break;
}
if(j>sqrt(i))
cout<<i<<" ";
}
return 0;
}