LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2515|回复: 8

这个1到999999999的阵列,如何用perl实现?

[复制链接]
发表于 2004-5-13 20:31:22 | 显示全部楼层 |阅读模式

  1. /* Functions
  2. * print lines as following, and total value of each line:
  3. * 1+11+111+1111+11111+111111+1111111+11111111+111111111 =
  4. * 2+22+222+2222+22222+222222+2222222+22222222+222222222 =
  5. * 3+33+333+3333+33333+333333+3333333+33333333+333333333 =
  6. * 4+44+444+4444+44444+444444+4444444+44444444+444444444 =
  7. * 5+55+555+5555+55555+555555+5555555+55555555+555555555 =
  8. * 6+66+666+6666+66666+666666+6666666+66666666+666666666 =
  9. * 7+77+777+7777+77777+777777+7777777+77777777+777777777 =
  10. * 8+88+888+8888+88888+888888+8888888+88888888+888888888 =
  11. * 9+99+999+9999+99999+999999+9999999+99999999+999999999 =
  12. *
  13. *               Version 0.1.0
  14. *    Copyright (C) seablue at linuxsir.cn
  15. *                 2004-05-13
  16. * gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)
  17. */
  18.                                                                                 
  19. main()
  20. {double t;
  21. unsigned long s;
  22. int i,k;
  23.   for(i=1;i<10;i++)
  24.       {for(s=0,t=0,k=0;k<9;k++)
  25.          {s=i+10*s;
  26.           t=s+t;
  27.             if(k==8)printf("%ld = %11.0lf\n",s,t);
  28.             else
  29.             printf("%ld+",s);
  30.          }
  31.       }
  32. }
复制代码

c的打印效果如下:

  1. 1+11+111+1111+11111+111111+1111111+11111111+111111111 =   123456789
  2. 2+22+222+2222+22222+222222+2222222+22222222+222222222 =   246913578
  3. 3+33+333+3333+33333+333333+3333333+33333333+333333333 =   370370367
  4. 4+44+444+4444+44444+444444+4444444+44444444+444444444 =   493827156
  5. 5+55+555+5555+55555+555555+5555555+55555555+555555555 =   617283945
  6. 6+66+666+6666+66666+666666+6666666+66666666+666666666 =   740740734
  7. 7+77+777+7777+77777+777777+7777777+77777777+777777777 =   864197523
  8. 8+88+888+8888+88888+888888+8888888+88888888+888888888 =   987654312
  9. 9+99+999+9999+99999+999999+9999999+99999999+999999999 =  1111111101
复制代码
发表于 2004-5-13 21:02:19 | 显示全部楼层
来个简单的(加点投机取巧,呵呵)

  1. #!/usr/bin/perl -w

  2. $s = "1+11+111+1111+11111+111111+1111111+11111111+111111111";
  3. print "$s = ".eval($s)."\n";
  4. foreach $c (2..9){
  5.   $s =~ s/\d/$c/g;
  6.   print "$s = ".eval($s)."\n";
  7. }
复制代码
 楼主| 发表于 2004-5-13 21:12:12 | 显示全部楼层
:thank
这么简洁?!!!
如果代码里面不允许出现:1+11+...+111111111呢?
:p
发表于 2004-5-13 22:13:12 | 显示全部楼层
那就吧
$s = "1+11+111+1111+11111+111111+1111111+11111111+111111111";
换成:

  1. $s = "1";
  2. for($a = "11"; $a ne "1111111111"; $a .= "1"){
  3.   $s .= "+$a";
  4. }
复制代码

或者:

  1. $s = "1+2+3+4+5+6+7+8+9";
  2. $s =~ s/(\d)/1x$1/ge;
复制代码

呵呵,还有很多方法。
发表于 2004-5-13 22:26:43 | 显示全部楼层

  1. foreach(1..9){
  2.   $s .= 1x$_."+";
  3. }
  4. chop $s;
复制代码

  1. foreach(0..8){
  2.   $a[$_] = 1x($_+1);
  3. }
  4. $s = join "+", @a;
复制代码
 楼主| 发表于 2004-5-13 22:28:20 | 显示全部楼层
:p
如果要求总数的值右边对齐呢?
:thank了
发表于 2004-5-14 13:49:58 | 显示全部楼层
perl也有printf,用法和c几乎是一样的。
 楼主| 发表于 2004-5-14 21:34:29 | 显示全部楼层
太谢谢BBDD了;改造一下发现 perl is very coooooool!


  1. #!/usr/bin/perl -w
  2.                                                                                 
  3. $s = "1+2+3+4+5+6+7+8+9";
  4. $s =~ s/(\d)/1x$1/ge;

  5. printf ("$s = %11.0f\n",eval($s));
  6. foreach $c ((2..9)){
  7.   $s =~ s/\d/$c/g;
  8.   printf ("$s = %11.0f\n",eval($s));
  9. }
复制代码


输出结果和C的一模一样:

  1. [linuxer@mydesktop c]$ perl 1-9.pl
  2. 1+11+111+1111+11111+111111+1111111+11111111+111111111 =   123456789
  3. 2+22+222+2222+22222+222222+2222222+22222222+222222222 =   246913578
  4. 3+33+333+3333+33333+333333+3333333+33333333+333333333 =   370370367
  5. 4+44+444+4444+44444+444444+4444444+44444444+444444444 =   493827156
  6. 5+55+555+5555+55555+555555+5555555+55555555+555555555 =   617283945
  7. 6+66+666+6666+66666+666666+6666666+66666666+666666666 =   740740734
  8. 7+77+777+7777+77777+777777+7777777+77777777+777777777 =   864197523
  9. 8+88+888+8888+88888+888888+8888888+88888888+888888888 =   987654312
  10. 9+99+999+9999+99999+999999+9999999+99999999+999999999 =  1111111101
复制代码
发表于 2004-5-18 14:56:32 | 显示全部楼层
哇塞,原来perl确实是强大耶。
看来得好好学学了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表