免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2509 | 回复: 12
打印 上一主题 下一主题

平衡数的判断 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-14 11:31 |只看该作者 |倒序浏览
写段程序,判断一个正整数是否是平衡数(如3,121, 3443,23532等均是平衡数),不能调用把数字转化为字符串的函数。

int BalanceNumber(unsigned int i)   
{
        int a[10];
        int k;
        int count = 0;
        int low, high;
        while (i) {
                k = i%10;
                a[count++] = k;
                i = i/10;
        }
        --count;
        low = 0; high = count;
        while (a[low] == a[high] && low<=high) {
                low++; high--;
        }
        if (low>high) {
                return 1;
        }else{
                return 0;
        }
}  
main()
{
        unsigned int i = 23532;
        if(BalanceNumber(i))
                printf("This is a balanceNumber.n");
        else
                printf("This is not a balanceNumber.n");
}

望各位大虾批评指正,总觉得 用数组不是太好。

论坛徽章:
0
2 [报告]
发表于 2005-11-14 12:13 |只看该作者
总记得当初老师讲这个东西时说:"当你考虑使用队列和栈来解决回文数这个问题,你就开始尝试使用数据结构的思考方法解决问题了。"

论坛徽章:
0
3 [报告]
发表于 2005-11-14 12:19 |只看该作者
  1. /** If i is a balanced number, return 1; otherwise, return 0. */
  2. /**
  3. * Balanced number examples: 3, 33, 121, 3443, 23532
  4. */
  5. int balance_number( int i )
  6. {
  7.   int m = i;
  8.   int n = 0;

  9.   /* create an inversed-order number */
  10.   do {
  11.     n = n * 10 + m % 10;
  12.   } while ( m /= 10 );

  13.   /* are the original number and the inversed one equal? */
  14.   return !(i - n);
  15. }
复制代码

[ 本帖最后由 whyglinux 于 2005-11-14 12:34 编辑 ]

评分

参与人数 1可用积分 +1 收起 理由
win_hate + 1 我很赞同

查看全部评分

论坛徽章:
0
4 [报告]
发表于 2005-11-14 12:37 |只看该作者
原帖由 whyglinux 于 2005-11-14 12:19 发表
[code]/** If i is a balanced number, return 1; otherwise, return 0. */
/**
* Balanced number examples: 3, 33, 121, 3443, 23532
*/
int balance_number( int i )
{
  int m = i;
  int n = 0;

...



Just inverse the number:
$ function num(){ expr $(echo $1 | rev ) = $2; }
$ num 12345 12345
0
$ num 123454321 123454321
1

论坛徽章:
0
5 [报告]
发表于 2005-11-14 12:53 |只看该作者
3楼的真高,佩服!

论坛徽章:
0
6 [报告]
发表于 2005-11-14 13:27 |只看该作者
  1. int balance_number( int n )
  2. {
  3.   int m = 0;

  4.   while(m < n)
  5.   {
  6.     m = m * 10 + n % 10;
  7.     n /= 10;
  8.   }

  9.   return m > n ? !(m / 10 - n) : 1;
  10. }
复制代码

评分

参与人数 1可用积分 +1 收起 理由
win_hate + 1 我很赞同

查看全部评分

论坛徽章:
0
7 [报告]
发表于 2005-11-14 15:47 |只看该作者
原帖由 yzc2002 于 2005-11-14 13:27 发表
  1. int balance_number( int n )
  2. {
  3.   int m = 0;

  4.   while(m < n)
  5.   {
  6.     m = m * 10 + n % 10;
  7.     n /= 10;
  8.   }

  9.   return m > n ? !(m / 10 - n) : 1;
  10. }
复制代码


高!

论坛徽章:
0
8 [报告]
发表于 2005-11-14 15:52 |只看该作者
^_^, 以前华为公司的面试有这道题!

论坛徽章:
0
9 [报告]
发表于 2005-11-14 16:08 |只看该作者
hehe...
TO 楼上的:偶正是去那里面试遇到的题,当时就这道题没有做好,遗憾讷!

论坛徽章:
0
10 [报告]
发表于 2005-11-14 17:02 |只看该作者
原帖由 whyglinux 于 2005-11-14 12:19 发表
[code]/** If i is a balanced number, return 1; otherwise, return 0. */
/**
* Balanced number examples: 3, 33, 121, 3443, 23532
*/
int balance_number( int i )
{
  int m = i;
  int n = 0;

...


beautiful code!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP