C语言题目,2的N次方被3整除
来源:百度知道 编辑:UC知道 时间:2024/05/04 07:02:21
这个存在溢出问题,大概想了个思路,先给你说一下,上班比较忙,程序等写好了贴上来。
你建立数组num,用于存储2^n,数组num[0]存储2^n的个位,num[1]存储2^n的十位,以此推下去,关键的思路在这里,一个整数i,如果它的各位加和为3的倍数,那么它可以被3整除。这样只要数组num的各个元素相加的和为3的倍数,那么这个n也就计算出来了。这里num[0]可以从2开始,每次n+1,则从num[0]开始num[k]*2;if(num[k]*2>9){num[k+1]+=1;num[k]=num[k]*2-10;},最后一个for从num[0]加到num[m](num[m+1]为数组结束符‘\0’)就是i的各位加和了
这个是纯算法的题目,用的是用加法来降低乘法(或者说是冥级运算的数量级)的方法,同时为了解决c语言溢出的问题,只能用数组来做。
楼主要是看明白了,可以再思考下两个大数相乘的算法,比如两个20位长的数字相乘,甚至更长的两个数相承,还有相除算法,很有意思的:)
=============================================
#include <stdio.h>
#define N 10000//定义2^n最大长度
main()
{
char num[N];
int sum,i,j,n;
i=0;
n=1;
sum=2;
num[0]=2;
num[1]='}';//2^n结束符
while(j!=0&&i<=N)//判断2^n各位数字加和是否能被3整除
{
sum=0;
// printf("process!!\n");
n++;
for(;num[i]!='}';i++)
num[i]*=2;
for(i=0;num[i]!='}';i++)