C语言学习过程记录25 练习5

文章展示了C++编程中的三个示例:1)计算给定英文或整数的加法;2)将数组中的最小值与第一个数,最大值与最后一个数交换;3)输出100-200之间的素数。每个示例都涉及基础数据类型处理和数组操作。
摘要由CSDN通过智能技术生成
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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值