Sicily 6084 Times17
2015-02-03 20:01
344 查看
简单的二进制乘法计算,注意到二进制中有位移的存在,那么乘以17可以变成乘以(16+1),16=2^4,那么左移四位加上原来的数字就是答案啦~
#include <iostream>
#include <cstring>
using namespace std;
char s[1015];
int ans[1018];
int main()
{
int i, j, len;
cin >> s;
for (i = 0; i < 1008; i ++) ans[i] = 0;
len = strlen(s);
j = 4;
for (i = len - 1; i >= 0; i--) ans[j++] = s[i] - '0';//左移4位
j = 0;
for (i = len - 1; i >= 0; i--) ans[j++] += s[i] - '0';//加原来的数字
for (i = 0; i < 1008; i++) if (ans[i] > 1)
{
ans[i+1] += ans[i] / 2;
ans[i] %= 2;
}
//输出
while (ans[i] == 0 && i > 0) i--;
while (i >= 0) cout << ans[i--];
cout << endl;
return 0;
}
#include <iostream>
#include <cstring>
using namespace std;
char s[1015];
int ans[1018];
int main()
{
int i, j, len;
cin >> s;
for (i = 0; i < 1008; i ++) ans[i] = 0;
len = strlen(s);
j = 4;
for (i = len - 1; i >= 0; i--) ans[j++] = s[i] - '0';//左移4位
j = 0;
for (i = len - 1; i >= 0; i--) ans[j++] += s[i] - '0';//加原来的数字
for (i = 0; i < 1008; i++) if (ans[i] > 1)
{
ans[i+1] += ans[i] / 2;
ans[i] %= 2;
}
//输出
while (ans[i] == 0 && i > 0) i--;
while (i >= 0) cout << ans[i--];
cout << endl;
return 0;
}
相关文章推荐
- Sicily 1797. Do solve it directly
- Sicily 1424 奖金(拓扑排序)
- Sicily 1027
- Sicily 1949 && 1876 Basic Graph Problem(RMQ+并查集)
- Sicily 1828 Minimal(动态规划)
- Sicily 1194. Message Flood 排序+二分
- 关于欧拉函数及Sicily1085的解法
- sicily 1750 分组背包
- Sicily 1039 Phone Home(DFS染色)
- sicily 1031
- sicily 1146
- sicily 1240
- sicily 1419
- sicily 1402Panic Room(最大流最小割)
- sicily1634
- sicily 1158. Pick numbers bfs
- sicily 1752 选择
- sicily题目分类(转)
- sicily 1426 PhoneList 使用动态分配是在是太耗时了
- sicily 1021. Couples