| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4249 人关注过本帖, 3 人收藏
标题:忙里偷闲娱乐一下 数数字(二) 24小时后结贴
只看楼主 加入收藏
饭桶
Rank: 6Rank: 6
等 级:侠之大者
帖 子:165
专家分:422
注 册:2011-4-5
收藏
得分:0 
程序代码:
#include<stdio.h>
unsigned long long pow(int number,int n);
void main()
{
int n,t;
unsigned long long sum=1;
printf("位数:\n");
scanf("%d",&n);
for(t=2;t<=n;t++)
    sum=sum*10+pow(10,t-1);
if(n==1)
  sum=1;
printf("\n%lld\n",sum);

}
unsigned long long  pow(int number,int n)
{unsigned long long sum=1;

 int t;

 for(t=0;t<n;t++)
    sum=sum*number;

 return sum;

}

图片附件: 游客没有浏览图片的权限,请 登录注册


错了,题目都没有看清,算的是1-9999 9999 9999 9,范围就错了,悲剧啊,再改!

[ 本帖最后由 饭桶 于 2012-6-19 23:56 编辑 ]

人得一生得奋斗!
2012-06-19 23:25
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 10楼 demonleer
why

重剑无锋,大巧不工
2012-06-19 23:25
a1a
Rank: 2
等 级:论坛游民
帖 子:12
专家分:21
注 册:2007-4-5
收藏
得分:19 
ans = 1200000000001
2012-06-19 23:33
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:0 
以下是引用beyondyf在2012-6-19 23:25:52的发言:

why

一开始看到这结果觉得不可思议,后来才慢慢想明白。
2012-06-19 23:41
饭桶
Rank: 6Rank: 6
等 级:侠之大者
帖 子:165
专家分:422
注 册:2011-4-5
收藏
得分:19 
#include<stdio.h>
unsigned long long pow(int number,int n);
void main()
{
int n,t;
unsigned long long sum=1;
printf("位数:\n");
scanf("%d",&n);
for(t=2;t<=n-1;t++)
    sum=sum*10+pow(10,t-1);
sum=sum+1;
if(n==1)
  sum=1;
printf("\n%lld\n",sum);

}
unsigned long long  pow(int number,int n)
{_int64 sum=1;
 int t;
 for(t=0;t<n;t++)
    sum=sum*number;
 return sum;

}
图片附件: 游客没有浏览图片的权限,请 登录注册




改了一下!

人得一生得奋斗!
2012-06-20 00:03
饭桶
Rank: 6Rank: 6
等 级:侠之大者
帖 子:165
专家分:422
注 册:2011-4-5
收藏
得分:0 
回复 13楼 a1a
高手啊,一下子就看出来了!

人得一生得奋斗!
2012-06-20 00:03
饭桶
Rank: 6Rank: 6
等 级:侠之大者
帖 子:165
专家分:422
注 册:2011-4-5
收藏
得分:0 
回复 10楼 demonleer
哎……,你晚点改啊!分没了!
开个玩笑

[ 本帖最后由 饭桶 于 2012-6-20 00:15 编辑 ]

人得一生得奋斗!
2012-06-20 00:04
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:19 
回复 12楼 beyondyf
大概想了一下:
一位数是:1,记 a1 = 1。

两位数是:10, 11, ... ,19, 21, 31, ... ,91
把它分成两类:11, 21, ..., 91 只数个位的 1, 是 9 个1。然后, 10, 11, ..., 19, 只数十位,是 10 个 1。11 属于这只类,正好它有两个1,也得数两遍。
于是 100 以内是 1 + 9 + 11 = 20 个 1。记 a2 = 20.

考虑三位数。
可以分成两类:1??, 2??, ..., 9?? 只看后两位。那么每种形式都有 20 个 1。共 9*a2 个 1.再看 1**,不管 ** 是几,一共是从 100 到 199 共一百个数,只记百位,一共 100 个 1。(虽然像 111 这样的数有三个1,但 11 这两个在第一类里数到了)
于是 1000 以内是 9*20 + 10^2 + 20 = 300

非常容易归纳出
a[n+1] = 9*a[n] + 10^n + a[n] = 10a[n] + 10^n

会数列知识的同学,可以求出通项:an = n * 10^(n-1)
一万亿是13位数,12位数内共有 a[12] = 12e11 个 1。再加上 一万亿本身有一个1,所以是 12e11 + 1 个。

所以我给的代码就是
printf("1200000000001\n");
可以说和 10 楼没什么区别。

其实我讨厌找规律的题。因为我老是想得比较慢……


[ 本帖最后由 pangding 于 2012-6-20 00:10 编辑 ]
2012-06-20 00:07
饭桶
Rank: 6Rank: 6
等 级:侠之大者
帖 子:165
专家分:422
注 册:2011-4-5
收藏
得分:0 
我猜杨大哥是想出1-9999 9999 9999 9吧,让后结果后面就不会有一个1了,看上去很有规律,引起我们的思考。
纯属个人猜测!

人得一生得奋斗!
2012-06-20 00:08
饭桶
Rank: 6Rank: 6
等 级:侠之大者
帖 子:165
专家分:422
注 册:2011-4-5
收藏
得分:0 
回复 18楼 pangding
我还是太懒了,我只找到这里a[n+1] = 9*a[n] + 10^n + a[n] = 10a[n] + 10^n ,可以编程了,我就直接去编了,没有往后面算了。

人得一生得奋斗!
2012-06-20 00:13
快速回复:忙里偷闲娱乐一下 数数字(二) 24小时后结贴
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043112 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved