高校俱乐部之友好数(1)
2014-02-01 22:33
155 查看
例如x = 222, 输出231,因为2 + 2 + 2 = 6 = 2 + 3 + 1。
输入一个正整数x,由于输入数字较大,我们用字符串作为输入,字符串不包含首'0'。 (0 < x <= 10^1000)
我们同样用字符串来表示输出。
分析:面对这道题,首先考虑到的问题应该是这个最小的友好数有什么规则。好,在这里我就说一下我的思路吧!下面是一些例子:
x=222,y=231
x=1,y=10
x=100,y=1000
x=520,y=601
x=65200000,y=66000001
从以上例子中我们可以看出有四类数:
(一)只有一位的数x,那么友好数为10+x-1;
(二)最右边没有0(或者说不能被10整除的),那么友好数为x+10-1;
(三)最右边有n个0,右边算起的第n+1个数b,那么友好数为x+10^n-b+1.
(四)数x只有最左边一位是非零a,那么友好数为10^(n+1)+a-1
下面是还没有化的算法,会超时。
题目详情:
如果两个正整数组成它们的数字和相同则称它们互为友好数,给定正整数x,求比它大的最小的友好数。例如x = 222, 输出231,因为2 + 2 + 2 = 6 = 2 + 3 + 1。
输入一个正整数x,由于输入数字较大,我们用字符串作为输入,字符串不包含首'0'。 (0 < x <= 10^1000)
我们同样用字符串来表示输出。
分析:面对这道题,首先考虑到的问题应该是这个最小的友好数有什么规则。好,在这里我就说一下我的思路吧!下面是一些例子:
x=222,y=231
x=1,y=10
x=100,y=1000
x=520,y=601
x=65200000,y=66000001
从以上例子中我们可以看出有四类数:
(一)只有一位的数x,那么友好数为10+x-1;
(二)最右边没有0(或者说不能被10整除的),那么友好数为x+10-1;
(三)最右边有n个0,右边算起的第n+1个数b,那么友好数为x+10^n-b+1.
(四)数x只有最左边一位是非零a,那么友好数为10^(n+1)+a-1
下面是还没有化的算法,会超时。
char *friend(char* s) { int len = strlen(s); char *sr = (char *)malloc(1001); int j, jw = 0, i = len; memset(sr, 0, sizeof(sr)); while (s[--i] == '0'){} if (i == 0 && len == 1) { sr[0] = '1'; sr[1] = s[0] - 1; } else { if (i == len - 1) { s[len - 2] = s[len - 2] + 1; s[len - 1] = s[len - 1] - 1; for (j = len - 2, jw = 0; j >= 0; j--) { s[j] = s[j] + jw; jw = 0; if (s[j]>'9') { s[j] = s[j] - 9; jw = 1; } else { break; } } } else if (i>0 && i<len - 1) { s[i - 1] = s[i - 1] + 1; s[i] = '0'; s[len - 1] = '1'; for (j = i - 1, jw = 0; j >= 0; j--) { s[j] = s[j] + jw; jw = 0; if (s[j]>'9') { s[j] = s[j] - 9; jw = 1; } else { break; } } } else { sr[0] = '1'; s[len - 1] = s[0] - 1; s[0] = '0'; jw = 1; } if (jw == 1) { sr[0] = '1'; sr = strcat(sr, s); } else { sr[0] = '0'; sr = strcat(sr, s); sr++; } } return sr; }
相关文章推荐
- 英雄会(csdn 高校俱乐部)题解之友好数(1)
- 高校俱乐部第二届战神杯题解
- 2008俱乐部高校行之中南民族大学
- 英雄会 高校俱乐部 最少操作次数
- 欢乐暑假-高校俱乐部暑期线上编程竞赛奖励机制
- 一起走过的日子 - 高校俱乐部2014上半年校园活动精彩回顾
- 从CSDN的高校俱乐部看过去
- CSDN 高校俱乐部: 排列搜索
- P次方数 英雄会 csdn 高校俱乐部
- 高校俱乐部 之 整数问题
- 半质数的个数 csdn 英雄会 高校俱乐部
- 编程挑战-高校俱乐部-F(X) 及-- 数因子集合
- 高校俱乐部参会成员餐票领取安排及第二届研讨会邀请信
- 2013年天津工业大学高校俱乐部春季学期巡讲实录
- 高校俱乐部 之 人人code,整数取反
- 朋友的礼物(英雄会,csdn,高校俱乐部)信封问题,匹配模型
- 编程挑战-高校俱乐部 1.最小向量乘积 2.独特区间
- 2011级同学加分通知(只针对河软高校俱乐部2011级同学)
- 高校俱乐部审核期长安大学星辰同学参观CSDN总部
- 一道高校俱乐部的题,当时没有写好,从新写了下