杭电OJ——1229 还是A+B

还是A+B



Problem Description
读入两个小于10000的正整数A和B,计算A+B。需要注意的是:如果A和B的末尾K(不超过8)位数字相同,请直接输出-1。

Input
测试输入包含若干测试用例,每个测试用例占一行,格式为"A B K",相邻两数字有一个空格间隔。当A和B同时为0时输入结束,相应的结果不要输出。

Output
对每个测试用例输出1行,即A+B的值或者是-1。

Sample Input

 
1 2 1 11 21 1 108 8 2 36 64 3 0 0 1

Sample Output

 
3 -1 -1 100

Source

Recommend
JGShining
题目虽然很短,做起来可并没有那么简单!具体说一下思路:
如果要判断两个数字的尾位k是否相等,只要让|A-B|就可以了,相等相减后面的k位自然等于0,不相等就是其他数字。相减之后看它为零的尾数是否与k相等就可以了。
代码如下:
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
 int a,b,c,g,k;
 while(cin>>a>>b>>c&&(a!=0||b!=0))
 {
  g=abs(a-b);
  k=(int)pow(10.0,c*1.0);
  if(g%k==0){cout<<"-1"<<endl;}
  else {cout<<a+b<<endl;}
 }
 return 0;
}


### 杭电OJ 2008 C语言题目解析 杭电OJ平台上的2008年C语言相关题目涵盖了多种算法和数据结构的应用。对于特定的一类问题,通常会涉及字符串处理、数组操作以及基本的数学计算。 #### 字符串与数组的操作实例 考虑一道典型的题目——数列有序化[^3]: ```c #include <stdio.h> int main() { int n; scanf("%d", &n); int a[n]; for(int i = 0; i < n; ++i){ scanf("%d", &a[i]); } // 插入排序实现 for(int i = 1; i < n; ++i){ int key = a[i]; int j = i - 1; while(j >= 0 && a[j] > key){ a[j + 1] = a[j]; --j; } a[j + 1] = key; } printf("Sorted array:\n"); for(int k = 0; k < n; ++k){ printf("%d ", a[k]); } } ``` 此代码展示了如何利用插入排序来整理输入的数据序列,使得最终输出的是按升序排列的结果。这种方法不仅简洁明了,而且易于理解和维护。 #### 数值存储与进位处理技巧 另一常见问题是关于大整数加法,在这类场景下,往往采用字符数组的方式来保存较大的数值,并手动完成每一位相加及其可能产生的进位逻辑[^1]: ```c char num1[50], num2[50]; // 假设两个超长数字不会超过50位 scanf("%s %s", num1, num2); // 反转以便于从最低位开始逐位相加 strrev(num1); strrev(num2); for(size_t idx = 0; ;++idx){ if(idx >= strlen(num1) && idx >= strlen(num2)){ break; }else{ char digitA = '0'; char digitB = '0'; if(idx < strlen(num1)) {digitA=num1[idx];} if(idx < strlen(num2)) {digitB=num2[idx];} sum[idx]=(digitA-'0')+(digitB-'0')+carry; carry=sum[idx]/10; sum[idx]=sum[idx]%10+'0'; } } ``` 上述片段说明了当面对超出标准整形变量范围的大数运算时的一种解决方案。通过这种方式可以有效地解决由于硬件限制而无法直接表示极大或极小数值的情况。 #### 排版布局挑战 还有一类有趣的题目关注于图形化的排版效果,比如创建由字母组成的矩形图案[^4]: ```c void drawPattern(char outerChar, char innerChar, int size){ for(int row=0;row<size;++row){ for(int col=0;col<size;++col){ if(row==0 || row==(size-1)|| col==0|| col==(size-1)) putchar(outerChar); else putchar(innerChar); } puts(""); } } drawPattern('A', 'B', 10); ``` 这段程序能够打印出指定大小带有边框的正方形模式,其中边界使用一种字符填充内部则用另一种不同字符展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值