找回密码
 欢迎注册
查看: 21594|回复: 22

[提问] 关于printf的问题

[复制链接]
发表于 2010-4-1 10:16:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
我的基础很差,为了缩短我在emath论坛的贫富差距,我最近一直在尝试实现大数运算需要解决的问题里面列举的几个问题

最开始,我是从大数乘法入手的,比较顺利,现在我开始实现最小公倍数,最大公约数,可遇到了很大的阻碍,调试了N长的时间,我都快要疯了 。

最后,砍掉了大量的代码,发现问题集中在最基本的printf上,
难道printf不能同时调用两个两个以上的函数吗
这是咋回事?

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. unsigned long long LCM(unsigned long m,unsigned long n){
  4. unsigned long long a=m,b=n;
  5. while(a!=b){if(a<b) a+=m;else b+=n;}
  6. return a;
  7. }

  8. unsigned long GCD(unsigned long m,unsigned long n){
  9. while(m!=n){if(m<n) n-=m;else m-=n;}
  10. return m;
  11. }

  12. int main(){unsigned long a,b,m,n;
  13. scanf("%lu%lu",&a,&b);
  14. printf("%llu\n%lu\n",LCM(a,b),GCD(a,b));
  15. printf("====%lu====",GCD(a,b));
  16. return 0;
  17. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-4-1 10:20:48 | 显示全部楼层
你遇上什么问题的?理论上应该没有问题。
不过你这个LCM的实现好像有点慢
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-4-1 10:24:57 | 显示全部楼层
第16行的printf里面的GCD 打印结果为0,很奇怪。。。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-4-1 10:26:42 | 显示全部楼层
我的那个LCM没有用乘法,只用加法,我想速度应该不弱吧
另外,除了先求GCD,LCM还有没有什么其他的快速算法?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-4-1 10:38:57 | 显示全部楼层
我在VC2008调试你的代码是正常的。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-4-1 10:47:38 | 显示全部楼层
哦,我用的是
gcc version 4.4.1 (TDM-2 mingw32)

打印结果异常。。
第一个GCD始终为0,第二个GCD正常
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-4-1 10:54:58 | 显示全部楼层
的确,VC没有问题。

看来是GCC的问题
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-4-1 11:01:50 | 显示全部楼层
你遇上什么问题的?理论上应该没有问题。
不过你这个LCM的实现好像有点慢
mathe 发表于 2010-4-1 10:20


通常的时候,与乘法相比较,加法所花的时间总是被我们忽略了,
像这里,该怎么进行算法效率的比较呢
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-4-1 11:14:28 | 显示全部楼层
应该是编译器对%llu的解释出了问题。
不定个数参数的函数都有这类问题,编译器也没办法进行类型检查。

评分

参与人数 1鲜花 +8 收起 理由
wayne + 8

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-4-1 11:23:11 | 显示全部楼层
通常的时候,与乘法相比较,加法所花的时间总是被我们忽略了,
像这里,该怎么进行算法效率的比较呢
wayne 发表于 2010-4-1 11:01


那得看它们的比例关系,
现在乘法指令已经得到高度优化了,有时1个指令周期即可完成,
也许你多做一次if判断还不及多做一次乘法划算。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-19 19:03 , Processed in 0.047268 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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