11的100次幂 ,求结果有多少个1

题记:刚开始思考的时候一直认为 c中类型可以涵盖这个结果,但是我发现我错了,当我使用了循环之后就出现了随机值,最后又想到了堆栈文件等一系列的存储方式,但是由于水平有限无法成功。

  后来就想到了用数组存储值得位数的办法,最终得到了解决。


#include<stdio.h>

#include <string.h>
#define NUM   105  //数组的大小
#define POW   100   //11的次幂数


void print(int a[],int n)   //辅助输出函数
{
int i ;
for(i = 0 ;i < n ; i++)
{
if(i % 5 == 0)
{
printf("\n");
}
printf("%d ",a[i]);
}

printf("\n");
}


void carry( int a[],int n)  //进位处理函数
{
for(int i = 0 ; i < n ; i++)
{
if( a[i] > 9)
{
a[i+1] += 1 ;
a[i] -= 10 ;
}
}
}


void init(int a[],int n )   //对数组进行初始化
{
int i = 0 ;
for( i = 0 ;i < n ; i++ )  
a[i] = 0 ;  
}


int count(int a[])   //计算当前数组后面有多少个0
{
int i,j = 0;
for(i = NUM-1 ; a[i]==0 ; i--)
j++ ;  
return j ;
}


int main()
{
int i,j,num,countOne, test=0,temp[NUM],array[NUM];
  init(array,NUM) ; //对数组进行初始化
  init(temp,NUM) ;
  array[0]=1;   // 11的0次幂。
  
  for(i = 1 ; i <= POW ; i++)
  {   
  num = NUM - count(array);  //计算数组中的值位数。
  
  memcpy(temp,array,num*sizeof(int)); //数组的复制。       
  
  for(j = num ; j >=1 ; j--)
  {
  array[j] = array[j-1] ;     //移位操作 *10
  }
  
  array[0] = 0 ;   //末尾进行初始化 0
  
  for(j = 0 ; j < num ; j++)
  {
  array[j] += temp[j] ;   
  }
  carry(array,NUM);     
  }
  
  print(array,NUM) ;
  
  for(i = 0,countOne=0 ; i < NUM ; i++)
  {      
  if(array[i] == 1)
  countOne++ ;
  }
  
  printf("11的100次幂包含了%d个'1'.\n",countOne);
  
  
  
  return 0 ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值