c语言的循环代码大全,循环 (C语言代码)
解題思路:
指數疊加的大整數運算。
注意事項:
題目上說的n<10100這一句應該是打錯了,。我把程序查來查去查不出錯。后來把輸入的int改成字符串,設了200位,就通過了。
參考代碼:
#include
#include
int xx(char *a,char *b,char *c)
{
int i,j,t=0,k;
for(i=0;b[i]!=NULL&&i<100;i++)
{
for(j=0;a[j]!=NULL&&j<100;j++)
{
if(i+j<100)
{
if(c[j+i]==NULL)
{
c[j+i]='0';
if(j+i+1<=100)
c[j+i+1]=NULL;
}
t=(c[j+i]-'0')+(a[j]-'0')*(b[i]-'0');
c[j+i]=t%10+'0';
t=t/10;
k=j+i+1;
while(t!=0&&k<100)
{
if(c[k]==NULL)
{
c[k]='0';
c[k+1]=NULL;
}
t=t+(c[k]-'0');
c[k]=t%10+'0';
t=t/10;
k++;
}
}
}
}
return 0;
}
int add(char *m,char *nm)
{
int i,t=0,k;
for(i=0;i<200;i++)
{
if(m[i]==NULL&&nm[i]==NULL)
break;
else if(m[i]==NULL)
{
m[i]='0';
m[i+1]=NULL;
}
else if(nm[i]==NULL)
{
nm[i]='0';
nm[i+1]=NULL;
}
t=(m[i]-'0')+(nm[i]-'0');
m[i]=t%10+'0';
t=t/10;
k=i;
while(t!=0)
{
k++;
if(m[k]==NULL)
{
m[k]='0';
m[k+1]=NULL;
}
t=m[k]-'0'+t;
m[k]=t%10+'0';
t=t/10;
}
}
}
int main()
{
//?? ?long int bug=0;
int a,b,i,j,p=0,end=0,w=0;
char n[102],t[102],c[102],tempm[102],tempnm[102],mast[102],m[200],nm[200];
char check[200];
scanf("%s",check);?? ??? ??? ??? ?//找了好久終于找到了錯的地方,,,原來輸入問題。
scanf("%d",&b);
j=0;
for(i=(int)strlen(check)-1;i>=0&&j<=100;i--)
{
n[j]=check[i];
j++;
}
n[j]=NULL;
//這里是原本的整型輸入
//?? ?scanf("%d %d",&a,&b);
m[0]='0';
m[1]=NULL;
nm[0]='1';
nm[1]=NULL;
/*
for(i=0;i
{
n[i]=a%10+'0';
a=a/10;
}
n[i]=NULL;
*/
strcpy(mast,n);
strcpy(t,n);
tempm[0]='1';
tempm[1]=NULL;
for(i=1;i<=b;i++)
{
tempnm[0]=NULL;
c[0]=NULL;
xx(n,t,c);
xx(tempm,t,tempnm);
tempnm[b+1]=NULL;
c[b]=NULL;
add(m,nm);
p=0;
for(j=w;j
{
if(c[j]!=mast[j])
{
i=w;
break;
}
else
{
p=1;
w++;
}
}
if(p==1)
{
strcpy(nm,m);
if(w==b)
{
for(i=(int)strlen(m)-1;i>=0;i--)
{
printf("%c",m[i]);
//?? ?bug=bug*10+(m[i]-'0');
}
//?? ?printf("%ld",bug);
return 0;
}
strcpy(t,tempnm);
}
strcpy(tempm,tempnm);
strcpy(n,c);
end++;
if(end==100000)
{
break;
}
}
printf("-1");
return 0;
}
總結
以上是生活随笔為你收集整理的c语言的循环代码大全,循环 (C语言代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电子签名服务和云平台整合管理合同
- 下一篇: 主机箱前置耳机插孔没有声音的解决方案