POJ 1489

来源:互联网 发布:云计算技术解决方案 编辑:程序博客网 时间:2024/06/04 01:11

模拟题

注意要点:

1. 和快速幂类似,但是是加法。

2. 输入最后两行是\n;

3. 转string最后不要输出空格。

#include <cstdio>#include <cstring>#include <iostream>#include <map>using std::memset;using std::map;using std::cin;long long a,b;char stra[100], strb[100];map<char,int> symbol;char hash[10];long long parseInt(char str[100], int len){long long ans = 0 ;for(int i = 0 ; i < len; i++){if(str[i] != ' ')ans += symbol[str[i]];}return ans;}void parseString(long long a,char *str){int cnt = 0;int nbit = 0;while(a){for(int i = 0 ; i < a%10; i++)str[cnt++] = hash[nbit];if(a%10 && a/10) str[cnt++] = ' ';a /= 10;nbit++;}str[cnt++] = '\0';}void cal(char stra[100], int lena, char strb[100],int lenb){long long a = parseInt(stra, lena);long long b = parseInt(strb, lenb);char mida[100], midb[100];long long m = 0;long long bit = 0;while(b){parseString(1<<bit, mida);parseString(a, midb);long long lena1 = strlen(mida);long long lenb1 = strlen(midb);if(b&1){m += a;printf("%s", mida);printf(" *");for(int i = 0 ; i < 32 -lena1; i++)printf(" ");printf("%s\n", midb);}else{printf("%s", mida);for(int i = 0 ; i < 34 -lena1; i++)printf(" ");printf("%s\n", midb);}a = a<<1;b = b>>1;bit ++;}char ans[100];parseString(m, ans);printf("The solution is: ");printf("%s\n", ans);}void init(){symbol['|'] = 1;symbol['n'] = 10;symbol['9'] = 100;symbol['8'] = 1000;symbol['r'] = 10000;hash[0] = '|';hash[1] = 'n';hash[2] = '9';hash[3] = '8';hash[4] = 'r';}int main(){char stra[100], strb[100];init();while(cin.getline(stra, 100)){cin.getline(strb, 100);if(strlen(stra) && strlen(strb)){cal(stra, strlen(stra), strb, strlen(strb));}}}


原创粉丝点击