水题4-6
题目描述
读入两个小于10000的正整数A和B,计算A+B。需要注意的是:如果A和B的末尾K(不超过8)位数字相同,请直接输出-1。
测试输入包含若干测试用例,每个测试用例占一行,格式为"A B K",相邻两数字有一个空格间隔。当A和B同时为0时输入结束,相应的结果不要输出。
对每个测试用例输出1行,即A+B的值或者是-1。
2 3 1
12 22 1
11 111 2
0 0 2
5
-1
-1
*** 提示已隐藏,点击上方 [+] 可显示 ***
#include<cstdio> #include<cmath> int main() { int a, b,k; while(scanf("%d%d%d",&a,&b,&k) != EOF) { if(a == 0 && b == 0) break; int tmp = pow(10,k); if(a % tmp == b % tmp) printf("-1\n"); else printf("%d\n",a + b); } return 0; }
题目描述
守形数是这样一种整数,它的平方的低位部分等于它本身。
比如25的平方是625,低位部分是25,因此25是一个守形数。
编一个程序,判断N是否为守形数。
输入包括1个整数N,2<=N<100。
可能有多组测试数据,对于每组数据,
输出"Yes!”表示N是守形数。
输出"No!”表示N不是守形数。
6
11
Yes!
No!
*** 提示已隐藏,点击上方 [+] 可显示 ***
#include<iostream> #include<string> #include<cmath> using namespace std; int main() { string s; while(cin >> s) { int x = 0;; for(int i = 0; i != s.size(); i ++) { x = x * 10 + s[i] - '0'; } int y = x * x; int tmp = pow(10,s.size()); if(y % tmp == x) cout << "Yes!" << endl; else cout << "No!" << endl; } return 0; }
题目描述
两个小于1000000000的数
输入可能有多组数据,对于每一组数据,输出Input中的两个数按照题目要求的方法进行运算后得到的结果。
24 65
42 66666
3 67
66
180
39
*** 提示已隐藏,点击上方 [+] 可显示 ***
#include<iostream> #include<string> using namespace std; int main() { string a,b; while(cin >> a >> b) { long long x = 0; for(int i = 0; i != a.size(); i ++) { for(int j = 0; j != b.size(); j ++) { x += (a[i] - '0') * (b[j] - '0'); } } cout << x << endl; } return 0; }
题目描述
输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数。
输入格式:测试输入包含若干测试用例。每个测试用例占一行,给出m和A,B的值。
当m为0时输入结束。
输出格式:每个测试用例的输出占一行,输出A+B的m进制数。
2 4 5
8 123 456
0
1001
1103
*** 提示已隐藏,点击上方 [+] 可显示 ***
#include<iostream> using namespace std; void trans_k(long long x, int k) { if(x > 0) { trans_k(x / k, k); cout << x % k; } } int main() { int k; long long a, b; while(cin >> k) { if(k == 0) break; cin >> a >> b; a += b; if(a != 0) trans_k(a ,k); else cout << "0"; cout << endl; } return 0; }
题目描述
求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。
输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。
可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。
4 123 10
27
*** 提示已隐藏,点击上方 [+] 可显示 ***
#include<iostream> #include<string> #include<cctype> using namespace std; void trans_y(long long a, int y) { if(a > 0) { trans_y(a / y , y); int tmp = a % y; switch (tmp) { case 10: cout << "A"; break; case 11: cout << "B"; break; case 12: cout << "C"; break; case 13: cout << "D"; break; case 14: cout << "E"; break; case 15: cout << "F"; break; default: cout << tmp; } } } int main() { int x,y; string s; while(cin >> x >> s >> y) { long long a = 0; for(size_t i = 0; i != s.size(); i ++) { if(isalpha(s[i])) { s[i] = toupper(s[i]); a = a * x + s[i] - 'A' + 10; } else { s[i] = s[i] - '0'; a = a * x + s[i]; } } if(a == 0) cout << "0"; else trans_y(a,y); cout << endl; } return 0; }