c语言计算100以内偶数积

C语言100以内偶数积

百度上有好多类似代码,但是只是逻辑上正确却不能正常运行例如:下面展示一些 。

#include <stdio.h>
main()
{
    long s,n;
    s=1;
    for(n=2;n<=100;n=n+2)
    s=s*n;    
    printf("s=%ld\n",s);
}

但是就算是long long也只有2^64,也就是说只能表示大约20位数字,完全不够使用。于是我们需要用字符串去处理还记得三年级学的竖式乘法么?这里归类一下
out[i+j-1]=in1[i]*in2[j];
但是输入到数组内的为倒序所以实际上为(比如out,in1,in2都设10位,所有数组的最后一位是个位)
out [9-j-i]=in1[9-i]*in2[9-j];
但是这样的话out的每一位可能超过10,还需要进行进位一下。
进位代码类似这样

//进位控制
for (k = 99;k > 0;k--)
{			
	if (output[k] >= 10)		
	{								    
   		output[k - 1] += output[k] / 10;
   		output[k] = output[k] % 10;	
	}		
}

输出的时候需要吧数字转化为ascll码,需要将所有的数字+‘0’
这时候我们转化完了需要输出,但是数组开头可能是’0’!所以我们需要先获取道第一位有效值得下标,然后从第一位有效值输出。
所以这里我们有需要写输出函数

for (k = 0;output[k] == '0';k++);//寻找第一位有效数字 
 /***************字符输出*****************/	
 printf("100以内的偶数积为:");
 for (i = k;i < 100;i++)	
{	
   	putchar(output[i]);
}

整体就是这样了,再加上一(亿)点判断挑选出100以内偶数
在添加一(亿)点点代码就好了
具体代码在下方:

 //6. 编写程序求1到100之间的偶数之积。
#include "stdio.h"
int main()
{	
  unsigned char output[100] = { 0 };
  int i = 0, j, k, l;	
  unsigned char temp[103] = { 0 };	
  temp[99] = 1;	
  output[99] = 1;	
  temp[101] = 0;
  temp[102] = 0;	
  while (++temp[102])
  	{		
  		if (temp[102] == 10)	
  		{	
  	        	temp[102] = 0;
  	       		temp[101]++;		
  	       	    	if (temp[101] >= 10)
  	   			break;	
  	   	}		
  	   	if (temp[102] % 2 == 1)	
  	    	{		
	  	    	/**************输入部分 *****************/			             
	                for (j = 0;j < 100;j++)			
	  	    	{		
	  	    		temp[j] = output[j];		
	  	    	}			
	  	    	 i = 100;			
	  	    	 j = 2;			
	  	    	 /**************按位乘(竖式乘法)**********/			
	  	    	for (l = 0;l < i;l++)			
	  	    	{		
	  	    	 	for (k = 0;k < j;k++)				
	  	    	  	{					
	  	    	  		output[99 - (l + k)] += (temp[i - l - 1] * temp[i + j - k]);				
	  	    		}			
			}		
	  		/*****************进位控制***************/			
	  		for (k = 99;k > 0;k--)		
	  		{			
	  			if (output[k] >= 10)			
	  			{				
	  				output[k - 1] += output[k] / 10;	
	  				output[k] = output[k] % 10;			
	  			}		
	  		}		
		}	
	}	
	/***************数字转字符***************/	
	for (k = 0;k < 100;k++)	
		output[k] += '0';
	for (k = 0;output[k] == '0';k++);//寻找第一位有效数字 	
	/***************字符输出*****************/	
	printf("100以内的偶数积为:");
	for (i = k;i < 100;i++)	
	{
		putchar(output[i]);	
	}	
 	return 0;
}

计算完成后值是:

34243224702511976248246432895208185975118675053719198827915654463488000000000000
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值