亮亮做加法 XDU1003
来源:互联网 发布:战地之王刷枪软件 编辑:程序博客网 时间:2024/05/01 14:49
1.题目描述:点击打开链接
2.解题思路:本题要求输入两个b进制整数X,Y,输出他们相加后的b进制的结果。本题据说可以直接用Java的特性很方便的解决。但这里还是介绍如何利用C++来解决。其实思路很简单,模拟b进制数相加的过程即可。先把输入的X,Y转化为十进制整数,相加得到十进制的和后再转化为b进制即可。不过其中有一些要注意的地方:(1)注意结果是0的时候。(2)由于题目中说答案的最大范围不超过18位,应该用long long。我交了好几次才发现这一点==看来对数据范围还是不太敏感啊。
3.代码:
#define _CRT_SECURE_NO_WARNINGS #include<iostream>#include<algorithm>#include<string>#include<sstream>#include<set>#include<vector>#include<stack>#include<map>#include<queue>#include<deque>#include<cstdlib>#include<cstdio>#include<cstring>#include<cmath>#include<ctime>#include<functional>using namespace std;char ans[50];typedef long long ll;ll cal(char*s,int b)//转化为十进制数{ll x = 0;int len = strlen(s);for (int i = 0; i < len; i++)if (isdigit(s[i]))x = x * b + s[i] - '0';else x = x * b + s[i] - 'A' + 10;return x;}void solve(ll res, int b)//结果转化为b进制数{int p = 0;if (!res)ans[p] = '0';elsewhile (res>0){int m = res%b;if (m > 9)ans[p++] = m - 10 + 'A';else ans[p++] = m + '0';res /= b;}}int main(){//freopen("t.txt", "r", stdin);int b;char s[50], t[50];ll x, y, res;while (~scanf("%d", &b)){scanf("%s%s", s, t);memset(ans, '\0', sizeof(ans));x = cal(s, b);y = cal(t, b);res = x + y;solve(res, b);int len = strlen(ans);for (int i = len - 1; i >= 0; i--)putchar(ans[i]);puts("");}return 0;}
0 0
- 亮亮做加法 XDU1003
- 西电ACM 1003 亮亮做加法
- 亮亮
- 不用加法做加法。。
- DOM做加法计算器
- 不用+,-,×,/做加法
- 不用+,-,×,/做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 位运算做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- Add Binary - LeetCode 67
- 在sublime text 3中安装中文支持
- 第七题(1~2)
- 前往江湾景点
- C语言控制输出小数点位数
- 亮亮做加法 XDU1003
- 亚马逊给创业者5条建议:开会杜绝PPT
- Marriage Match III (hdu 3277 网络流+并查集+二分)
- samck中ProviderManager的学习
- House Robber - LeetCode 198
- zoj3785 What day is that day?
- 第四站 卧龙谷
- 从零到在虚拟机中搭建hadoop伪分布平台
- 判断是否为二叉树的后续遍历