大小写互换、机器指令、分数化小数

大小写互换

现在给出了一个只包含大小写字母的字符串,不含空格和换行,要求把其中的大写换成小写,小写换成大写,然后输出互换后的字符串。

输入

第一行只有一个整数m(m<=10),表示测试数据组数。 
接下来的m行,每行有一个字符串(长度不超过100)。

输出

输出互换后的字符串,每组输出占一行。

样例输入

2
Acm
ACCEPTED

样例输出

aCM
accepted
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define endl '\n'
int main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	int m;
	cin>>m;
	while(m--){
		string s,t;
		cin>>s;
		t.resize(s.size());
//transform函数的作用是:将某操作应用于指定范围的每个元素。
/*transform(first,last,result,op);first是容器的首迭代器,last为容器的末迭代器,result为存放结果的容器,op为要进行操作的一元函数对象或sturct、class。*/
	transform(s.begin(),s.end(),t.begin(),[](char c){
		if(isupper(c))return tolower(c);//isupper()函数用来判断一个字符是否为大写字母
		else return toupper(c);});
//toupper()函数:把小写字母转换为大写字母
//tolower()函数:把大写字母转换为小写字母
		cout<<t<<endl;
	}
	return 0;
}

机器指令

“让我看看…下一个语句是$C64410…翻译成二进制代码是110001100100010000010000…分段后是110-00-110-1100100010000010000…第一段的110对应的汇编指令是mov…接下来的00表示的是寄存器ax…第三段的110表示的是间接寻址…然后1100100010000010000是内存地址…Finallyyyyyy…对应的汇编语句是mov([1044],ax)--将内存地址为1044的内存中的数据存入ax.” 

丁丁同学正为下午的Understanding The Machine 作业中一道将十六进制机器码翻译成汇编语言的题忙得焦头烂额。这种对着一个译码表“进行符号转化”的活,向来是丁丁同学最不能容忍的 – 宝贵的时间就在这样的一道”民工题”上一秒一秒地流逝…唉… 

丁丁希望你能编写一个程序来帮帮他。当然,他不会那么残忍地让你去编写一个编译器完成整套工作。他只希望你帮他完成一个小小的模块--将十六进制数转化为二进制数。你可以帮助他么?

输入

多组输入,样例数最大为100。 
每组输入是一个由"0123456789ABCDEF"十六种字符组成的一个序列。序列的长度N的满足: 1<= N <= 10,000。每个序列以换行符结束。

输出

这个序列对应的二进制数。输出每个序列后换行。

样例输入

C6
88D7

样例输出

11000110
1000100011010111
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define endl '\n'
int main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	string n;
		int x;
	while(cin>>n){
		for(char ch:n){
		string s(1,ch);// 将字符 ch 转换为一个只包含该字符的字符串s
		istringstream iss(s);//istringstream作用是从string对象str中读取字符
		iss>>hex>>x;
//将 iss 输入流中的数据依次按十六进制格式读取并解析,然后将解析得到的整数存储到变量 x 中
		int a=x/8,b=x%8/4,c=x%4/2,d=x%2;
		cout<<a<<b<<c<<d;
	}
	cout<<endl;
	}
	
	return 0;
}

istringstream作用举例

#include<bits/stdc++.h>
using namespace std;
int main(){
  string str="i am a boy";  
    istringstream is(str);  
    string s;  
    while(is>>s)  
    {  
        cout<<s<<endl;  
    } 
}

输出为:

i

am

a

boy

分数化小数

输入正整数a,b,c 其中1≤a,b<1e6,c≤100输出a/b的小数形式,精确到小数点后的c位,例如a=1,b=6,c=4输出应该是0.1667

输入

多组输入,每行有3个正整数a,b,c

输出

输出a/b的小数形式,精确到小数点后的c位

样例输入

1 6 4
1 2 20

样例输出

0.1667
0.50000000000000000000
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define endl '\n'
int main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	int a,b,c;
	while(cin>>a>>b>>c){
		vector<int> v;
		cout<<a/b<<".";
		a%=b;
		for(int i=0;i<=c;i++){
			a*=10;
			v.push_back(a/b);
			a%=b;
		}
		int cs;
		if(v.back()>=5)cs=1;
		else cs=0;//cs用来四舍五入的,若小数点后c+1位大于等于五则c位加一,否则不加
		v.pop_back();
//这段代码用来处理四舍五入导致前面位置的小数产生进数
//如a/b=0.8999,保留后面三位,第四位为9,要四舍五入进一,可是这样就导致了第三位小数变成了10,产生了进位
		for(int i=v.size()-1;i>=0&&cs;i--){
			int temp=v[i]+cs;
			v[i]=temp%10;
			cs=temp/10;	
		}
		for(int i=0;i<v.size();i++)
		cout<<v[i];
		cout<<endl; 
	}
	
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值