能力值:
( LV2,RANK:10 )
|
-
-
2 楼
郝斌的C不错,入门级的,讲得还行
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
void sum(int n)
{
unsigned int sum = 0;
unsigned int a = 11;
for ( i = 0; i < n; i ++)
{
sum +=a;
a = a *10+1;
}
}
------------------------
仅供学习
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
ls没考虑溢出吧
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
#include<stdio.h>
int main(int argc,char *argv[])
{
int i=1,sum=0,j,n;
scanf("%d",&n);
for(j=1;j<=n;j++)
{
i=i*10+1;
sum=sum+i;
}
printf("%d\n",sum);
return 0;
}
gcc -Wall编译通过,
输入
9
输出
1234567899
不知对不对
-------------------华丽丽的分割线--------------------
多谢ls提醒,当n>16就溢出了,那我就重新写
#include<stdio.h>
struct zk {int i,sum;};
struct zk fun(long unsigned int n,long unsigned int sum)
{
int i;
n=n+(n-1)*10+(n-2)*100;
i=n % 1000;
sum=n / 1000;
struct zk z={i,sum};
return z;
}
int main(int argc,char *argv[])
{
int sum,n=32767,i;
struct zk z;
while((n>32766)||(n<2)) scanf("%d",&n);
int a[n];
for(i=0;i<=n;++i) a[i]=-1;
i=1;
a[0]=n*11+(n-1)*100+(n-2)*1000;
sum= a[0] / 1000;
a[0]=a[0] % 1000;
n-=3;
while(n>0){
z=fun(n,sum);
a[i]=z.sum + z.i;
sum=a[i] / 1000;
a[i]=a[i] % 1000;
n-=3;
i+=1;
}
for(;i>=0;--i) if (a[i] !=(-1)) printf("%d",a[i]);
printf("\n");
return 0;
}
/*
还是gcc -Wall 编译通过,花了很久的时间总算写好了
这个程序输入12345都能算出来
额,好吧,我把题目看成了:11+11+111+1111......
(加两个11)
所以我的代码错了,但只要修改下就可以了
说是不会溢出,但是那些数字好诡异,我怀疑还是溢出了,还是有数学奥秘之类的
希望有大虾帮我研究下,谢谢
*/
-------------------华丽丽的分割线--------------------
我推荐linuxC编程一站式学习这本书,很不错
没基础都可以入门(不过数学基础还是要的)
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
这种最简单的都做不来!看来你娃儿还没入门哦!基础不行哈!
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
谢谢大家的热心帮忙!
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
在不溢出的情况下,考虑结果的规律性,是否可以直接写出
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
我觉得3楼的这个应该很不错啊,蛮简洁的,添加一个main函数把n(最后有1的个数-2就可以,因为a=11,已经用了2位了。)的值传到子函数里面就可以了。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
额额…如果很多个1的话可以用高精度加法的思想来写这题,简单说就是用数组每个元素代表一个很大数字的一位数,加上利用本题的特殊性质:
11
111
1111
...
+1......1
易得此题答案为 f[i]=((n-i+1)/10+(n-i))mod 10,因为不是从1开始,所以要注意处理下初识部分,时间复杂度O(n),计算到10w个1也可以的。代码如下:
#include<stdio.h>
int main()
{
int i,j,n,tmp,s[100005]={0};
scanf("%d",&n); //n是指有n个数
s[1]=n/10;s[0]=n%10; //初始化
for(i=0;i<=n;i++){
s[i+1]+=n-i;
s[i+2]=s[i+1]/10;
s[i+1]%=10;
}
for(i=n;i>=0;i--) //是逆序存的哦
printf("%d",s[i]);
return 0;
}
另…求教有什么办法能让代码保持缩进呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
好吧原来会有缩进诶,肿么预览里木有呢?
囧……
|
|
|