每日刷题(八十八)
快过年了还不给个三连吗?✌ (>‿◠)✌
问题 B: A+B
题目描述
给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。
现在请计算A+B的结果,并以正常形式输出。
输入
输入包含多组数据数据,每组数据占一行,由两个整数A和B组成(-109 < A,B < 109)。
输出
请计算A+B的结果,并以正常形式输出,每组数据占一行。
样例输入
-234,567,890 123,456,789
1,234 2,345,678
样例输出
-111111101
2346912
思路:将带有逗号的数据转换为正常数,这里需要用到sscanf()函数
int sscanf ( const char * s, const char * format, …);
这里还是给一个sscanf的小例子
#include<iostream>
using namespace std;
int main()
{
char a[10] = {
'1', '2', '3'};
int m;
sscanf(a, "%d", &m);
cout << m;
return 0;
}
运行结果:
很显然,sscanf是将字符串内容转换为数字的不二之选,当然字符串里的必须是纯数,这就有点像JAVA中的parseInt(String s),即返回用十进制参数表示的整数值
详细C++代码如下:
#include<cstdio>
#include<string.h>
int main()
{
char a[10], b[10], a2[10], b2[10];
int aLen, bLen;
int m, n;
while(scanf("%s %s", a, b) != EOF)
{
aLen = strlen(a);
bLen = strlen(b);
int j = 0;
for(int i = 0; i < aLen; i++)
{
if(a[i] >= '0' && a[i] <= '9')
{
a2[j++] = a[i];
}
}
a2[j] = '\0';
sscanf(a2, "%d", &m);
if(a[0] == '-')
m = -m;
j = 0;
for(int i = 0; i < bLen; i++)
{
if(b[i] >= '0' && b[i] <= '9')
{
b2[j++] = b[i];
}
}
b2[j] = '\0';
sscanf(b2, "%d", &n);
if(b[0] == '-')
n = -n;
int conseq = 0;
conseq = n + m;
printf("%d\n", conseq);
}
return 0;
}
样例运行结果如下:
问题 C: 特殊乘法
题目描述
写个算法,对2个小于1000000000的输入,求结果。特殊乘法举例:123 * 45 = 1 * 4 + 1 * 5 + 2 * 4 + 2 * 5 + 3 * 4 + 3 * 5
输入
两个小于1000000000的数
输出
输入可能有多组数据,对于每一组数据,输出Input中的两个数按照题目要求的方法进行运算后得到的结果。
样例输入
24 65
42 66666
3 67
样例输出
66
180
39
详细C++代码如下:
#include<iostream>
using namespace std;
int main()
{
int a[10], b[10];
int m, n;
int u, v;
while(cin >> m >> n)
{
u = m;
v = n;
int i = 0;
while(m != 0)
{
a[i++] = m % 10;
m /= 10;
}
int j = 0;
while(n != 0)
{
b[j++] = n % 10;
n /= 10;
}
int cnt = 0;
for(int k = 0; k < i; k++)
{
for(int h = 0; h < j; h++)
{
cnt += a[k] * b[h];
}
}
if(u == 0 || v == 0)
cnt = 0;
cout << cnt << endl;
}
return 0;
}
样例运行结果如下: