64,685
社区成员
发帖
与我相关
我的任务
分享
if(b.GetAt(i)=='1')
{
A[j]=A[j]+T[j]+g;
if(A[j]>9)
{
A[j]=A[j]-10;
g=1;
}
else
{
g=0;
}
}
// 改为
A[j] += ( b[i] == '1' ? T[j] : 0 ) + g;
if(A[j]>9)
{
A[j]-=10;
g=1;
}
else
{
g=0;
}
#include <iostream>
#include <math.h>
void main() {
int A[1024]={0},T[1024]={0};
char* b = "10111010010001111110001";
int i,j,c=0,g=0;
int nlen=strlen(b);
int m=ceil(nlen/3.322);
T[0]=1;
if (b[0]=='1')
{
A[0]=1;
}
for(i=1;i<nlen;++i)
{
for(j=0;j<m;++j)
{
T[j]+=T[j]+c;
if (T[j]>9)
{
T[j]-=10;
c=1;
}
else
{
c=0;
}
A[j] += ( b[nlen-1-i] == '1' ? T[j] : 0 ) + g;
if(A[j]>9)
{
A[j]-=10;
g=1;
}
else
{
g=0;
}
}
}
for ( int i = 0; i < m; ++i ) {
printf("%c", A[m-1-i] + '0');
}
getchar();
}
10111010010001111110001 == 6104049
没注意看方向,现在应该差不多了。