做了一道C语言的题目,希望大家帮忙看一下

zerostormr 2010-06-24 07:59:35
一个百万富翁遇到一个穷人,穷人找
创建时间:2010年6月9日(星期三) 晚上7:27 | 分类:未分类 | 字数:220 | 发送到我的Qzone | 另存为... | 打印
编程一:一个百万富翁遇到一个穷人,穷人找他谈一个换钱的计划,说计划如下:我每天给你十万元,而你第一天只需给我一元钱;第二天我仍给你十万元,你给我二元钱,第三天我仍给你十万元,你给我四元钱……,你每天给我的钱是前一天的两倍,我每一天给你十万元,直到满一个月(30天),百万富翁很高兴,接受了这个契约。请写一个程序计算这一个月中穷人给了百万富翁多少钱,百万富翁了穷人多少钱。
备注:
可以用S代表百万富翁给穷人的钱
T穷人给百万富翁的钱。

代码:
#include<stdio.h>
main()
{
int i=10,j=1,atob=0,btoa=0;
/*atob是陌生人给富人的钱数,单位:万元
btoa是富人给陌生人的钱数,单位分*/
int t;
for (int k=1;k<=30;k++) //从第一天到第30天
{
atob+=10; //每天陌生人给富人10万
if (k==1)// 如果是第一天
t=1; //富人给陌生人1分
else //如果不是第一天
t=2*t; //富人给的钱是前一天的两倍
btoa+=t; //加到总数里面
}
printf("穷人给富人的钱是%d万元\n",atob);
printf("富人给穷人的钱是%d元\n",btoa);

}
...全文
466 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋光 2010-06-26
  • 打赏
  • 举报
回复
赞一个!!
a541345750 2010-06-25
  • 打赏
  • 举报
回复
没有看懂呀,二进制的什么呀。。。
bobo364 2010-06-25
  • 打赏
  • 举报
回复
用通俗易懂的写法写了个,楼主可以参考下,当然用楼上的二进制也是个比较容易效率较高的办法
#include<stdio.h>

int main()
{
int i,k=1,sum=0;
//富人
printf("富人的金额\n");
printf("%d\n",10*10000*30);
//穷人
for(i=0;i<30;i++)
{
sum=sum+k;
k=k*2;
}
printf("穷人的金额\n");
printf("%d\n",sum);
system("pause");
return 0;
}
chenglin1822 2010-06-25
  • 打赏
  • 举报
回复
二进制,不错。。。
yj0821421350 2010-06-25
  • 打赏
  • 举报
回复
#include<stdio.h>

int main()
{
int i,k=1,sum=0;
//富人
printf("富人的金额\n");
printf("%d\n",10*10000*30);
//穷人
for(i=0;i<30;i++)
{
sum=sum+k;
k<<=1; //采用移位操作效率更高。
}
printf("穷人的金额\n");
printf("%d\n",sum);
//system("pause");
return 0;
}
cs8728205 2010-06-24
  • 打赏
  • 举报
回复
用位。。?

深奥。。。
leogentleman 2010-06-24
  • 打赏
  • 举报
回复
很强!
不过~~应该是 2<<30 - 1 吧??不是30天的钱总和么?
zwd_125 2010-06-24
  • 打赏
  • 举报
回复
二进制,妙!
Jinstrong 2010-06-24
  • 打赏
  • 举报
回复
用二进制再用执行位操作,思路很巧。
抓住了这个题目所要考察的技巧。
huanmie_09 2010-06-24
  • 打赏
  • 举报
回复
楼主这样做也没错,就是注释有点问题。富人给穷人的是以元为单位.
另外,要说明一下的是如果楼主的代码是运行在tc之类的编译器(sizeof(int)=2)时,btoa和t都会发生溢出(btoa的最终结果为2的30次方减去1, t的最大值为2的29次方),从而影响结果的正确性,这时应该将t, btoa都定义成long型(sizeof(long)=4).
zhangzhongke007 2010-06-24
  • 打赏
  • 举报
回复
呵呵,二进制,妙啊!
wade_2003 2010-06-24
  • 打赏
  • 举报
回复
二进制思想挺不错的,移位呵呵!
chaoliu1024 2010-06-24
  • 打赏
  • 举报
回复
对的,二进制移位即可!因为每天正好是前一天的两倍!
swl82560397pq 2010-06-24
  • 打赏
  • 举报
回复
嗯,2进制啊,楼主的思路还是十进制的。
cattycat 2010-06-24
  • 打赏
  • 举报
回复
对啊,1楼的即可,不用for循环了。
jbz001 2010-06-24
  • 打赏
  • 举报
回复
这也太简单了吧!
作业贴???
不给你写代码了,只写关键的一部分:
富翁给穷人的:

int pay1=10*10000*30;


穷人给富人的:

int pay2=1<<31-1;

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧