主题:[原创]NOIP 2006 第4题---讨论
Czhxdong
[专家分:510] 发布于 2007-01-06 22:07:00
[b] 2^k进制数[/b]
【问题描述】
设r是个2^k进制数,并满足以下条件:
(1)r至少是个2位的2^k进制数。
(2)作为2^k进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位。
(3)将r转换为2进制数q后,则q的总位数不超过w。
在这里,正整数k(1≤k≤9)和w(k<w≤30000)是事先给定的。
问:满足上述条件的不同的r共有多少个?
我们再从另一角度做些解释,设S是长度为w的01字符串(即字符串S由w个“0”或“1”组成),S对应于上述条件(3)中的q。将S从右起划分为若干个长度为k的段,每段对应一位2^k进制的数,如果S至少可分成2段,则S所对应的二进制数又可转换为上述的2^k进制数r。
例:设k = 3,w = 7。则r是个八进制数(2^3=8)。由于w = 7,长度为7的01字符串按3位一段分,可分为3段(即1,3,3左边第一段只有一个二进制位),则满足条件的八进制数有:
2位数:高位为1:6个(即12,13,14,15,16,17),高位为2:5个,…,高位为6:1个(即67)。共6 + 5 +…+1=21个。
3位数:高位只能是1,第二位为2:5个(即123,124,125,126,127),第2位为3:4个,…,第2位为6:1个(即167)。共5 + 4 +…+1=15个。
所以,满足要求的r共有36个。
【输入文件】
输入文件只有1行,为两个正整数,用一个空格隔开:
k w
【输入文件】
输出文件为1行,是一个正整数,为所求的计算结果,即满足条件的不同的r的个数(用十进制数表示),要求最高位不得为0,各数字之间不得插入数字以外的其它字符(例如空格、换行符、逗号等)。
(提示:作为结果的正整数可能很大,但不会超过200位)
【输入样例】
3 7
【输出样例】
36
输入:
8 4000
输出:
15789604461865809771178549250434395392663499233282028201972879200395656481971270141183460469231731687303715884105600
回复列表 (共11个回复)
沙发
Czhxdong [专家分:510] 发布于 2007-01-06 22:12:00
这是我写的程序:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<memory.h>
#include<time.h>
#define MAX 100
long total[MAX],suab[MAX];
long num=0,lab=0;
unsigned long long number=0;
long k,w;
long pow_2(long n)
{
long i,sum=1;
for(i=1;i<=n;i++)
sum*=2;
return sum;
}
long jinzi_2k(long mod,long jin)
{
long jin10=1,jin2k=0,i,j,save;
for(i=mod-1;i>=1;i--)
{
save=1;
for(j=1;j<=i;j++)
save*=2;
jin10+=save;
}
jin2k=jin10%jin;
return jin2k;
}
long new_jiecheng(long min,long max,long *sum)
{
long i,j,h,l,digit=0;
sum[0]=min;
for(i=min+1;i<=max;i++)
{
for(j=0;j<=digit;j++)
sum[j]*=i;
for(h=0;h<=digit;h++)
if(sum[h]>=10)
{
if(sum[digit]>=10)
digit++;
sum[h+1]=sum[h]/10;
sum[h]=sum[h]%10;
}
}
return digit;
}
int big_bijiao(long *sua,long *sub,long la,long lb)
{
long i,j;
for(i=la,j=lb;j>=0;)
{
if(sua[i]>sub[j])
{
break;
}
else if(sua[i]<sub[j])
{
break;
}
else if(sua[i]==sub[j])
{
j--;
i--;
}
}
if(sua[i]>sub[j]||j<0)
return 1;
else if(sua[i]<sub[j])
return -1;
return 0;
}
void big_chufa(long sua[],long sub[],long la,long lb)
{
long i,j,h,r,p,q;
long ab[MAX];
memset(suab,0,sizeof(suab));
lab=0;
for(i=la;i>=lb;i--)
{
for(j=0;j<=10;)
{
memset(ab,0,sizeof(ab));
for(h=0;h<=lb;h++)
ab[h]=sub[h]*j;
for(r=0;r<lb;r++)
if(ab[r]>=10)
{
ab[r+1]=ab[r]/10;
ab[r]=ab[r]%10;
}
if(big_bijiao(sua,ab,i,lb)==-1)
break;
else
j++;
}
suab[lab++]=j-1;
for(p=0,q=(i==1)?1:i-lb+1;p<=lb;p++,q++)
{
if(sua[q]<ab[p])
{
sua[q+1]-=1;
sua[q]+=10;
}
sua[q]-=ab[p];
}
sua[i-1]+=sua[i]*10;
}
}
void big_add()
{
long p,q,r;
num = num>lab ? num+1 : lab+1;
for(p=0;p<=num;p++)
{
total[p]+=suab[p];
if(total[p]>=10)
{
total[p+1]+=total[p]/10;
total[p]%=10;
}
}
if(total[num]==0)
num--;
}
void compute(long n,long m)
{
long i,j,ma;
long sua[MAX],sub[MAX],la=0,lb=0;
memset(sua,0,sizeof(sua));
memset(sub,0,sizeof(sub));
ma=m-n;
if(ma>=n)
{
la=new_jiecheng(ma+1,m,sua);
lb=new_jiecheng(1,n,sub);
big_chufa(sua,sub,la,lb);
}
else
{
la=new_jiecheng(n+1,m,sua);
lb=new_jiecheng(1,ma,sub);
/* big_chufa(sua,sub,la,lb);
}*/
/*printf("\narray sua:");
for(i=la;i>=0;i--)
printf("%ld",sua[i]);
printf("\n\narray sub:");
for(i=lb;i>=0;i--)
printf("%ld",sub[i]);*/
big_chufa(sua,sub,la,lb);
}
/*printf("\nlater**sua/sub=??????**************\n");
for(i=lab;i>=0;i--)
printf("%ld",suab[i]);*/
}
int main()
{
/*clock_t begin,end;*/
FILE *in=fopen("zhxdong.in","r");
FILE *out=fopen("zhxdong.out","w");
long h,i,j,l,wu,most=0,mod;
unsigned long long mb,m,ma;
long wei=0,yumax=0;
long sub[MAX];
fscanf(in,"%ld %ld",&k,&w);
fclose(in);
/*begin=clock();*/
most=pow_2(k)-1;
if(most>150)
{
if(w%k==0)
{
wei=w/k>most?most:w/k;
for(i=2;i<=wei;i++)
{
compute(i,most);
big_add();
}
}
else if(w%k!=0&&w/k+1>most)
{
wei=most;
for(i=2;i<=wei;i++)
{
compute(i,most);
big_add();
}
}
else
if(w%k!=0&&w/k+1<=most)
{
wei=w/k+1;
mod=w%k;
yumax=jinzi_2k(mod,pow_2(k));
for(i=2;i<=wei-1;i++)
{
compute(i,most);
big_add();
}
wu=most-1;
wei=wei-1;
for(j=1;wu>=wei&&j<=yumax;j++)
{
compute(wei,wu);
big_add();
wu--;
}
}
while(total[num]==0)
{
num--;
}
for(m=num;m>=0;m--)
fwprintf(out,"%ld",total[m]);
}
板凳
Czhxdong [专家分:510] 发布于 2007-01-06 22:13:00
else
{
if(w%k==0)
{
wei=w/k>most?most:w/k;
for(i=2;i<=wei;i++)
{
mb=1;
m=1;
ma=most-i;
if(ma>=i)
{
for(j=ma+1;j<=most;j++)
mb*=j;
for(j=1;j<=i;j++)
m*=j;
number+=mb/m;
}
else
{
for(j=i+1;j<=most;j++)
mb*=j;
for(j=1;j<=ma;j++)
m*=j;
number+=mb/m;
}
}
}
else if(w%k!=0&&w/k+1>most)
{
wei=most;
for(i=2;i<=wei;i++)
{mb=1;
m=1;
ma=most-i;
if(ma>=i)
{
for(j=ma+1;j<=most;j++)
mb*=j;
for(j=1;j<=i;j++)
m*=j;
number+=mb/m;
}
else
{
for(j=i+1;j<=most;j++)
mb*=j;
for(j=1;j<=ma;j++)
m*=j;
number+=mb/m;
}
}
}
else if(w%k!=0&&w/k+1<=most)
{
wei=w/k+1;
mod=w%k;
yumax=jinzi_2k(mod,pow_2(k));
for(i=2;i<=wei-1;i++)
{
mb=1;
m=1;
ma=most-i;
if(ma>=i)
{
for(j=ma+1;j<=most;j++)
mb*=j;
for(j=1;j<=i;j++)
m*=j;
number+=mb/m;
}
else
{
for(j=i+1;j<=most;j++)
mb*=j;
for(j=1;j<=ma;j++)
m*=j;
number+=mb/m;
}
}
wu=most-1;
wei=wei-1;
for(j=1;wu>=wei&&j<=yumax;j++)
{mb=1;
m=1;
ma=wu-wei;
if(ma>=wei)
{
for(j=ma+1;j<=wu;j++)
mb*=j;
for(j=1;j<=wei;j++)
m*=j;
number+=mb/m;
}
else
{
for(j=wei+1;j<=wu;j++)
mb*=j;
for(j=1;j<=ma;j++)
m*=j;
number+=mb/m;
}
wu--;
}
}
fprintf(out,"%ld",number);
}
/* end=clock();
printf("\n\nThe program has run %f seconds!",(double)(end-begin)/CLOCKS_PER_SEC);
*/
fclose(out);
return 0;
}
3 楼
DFDer [专家分:70] 发布于 2007-01-08 17:19:00
error occur at " fwprintf(out,"%ld",total[m]); ":
cannot convert `const char*' to `const wchar_t*' for argument `2' to `int fwprintf(FILE*, const wchar_t*, ...)'
4 楼
Czhxdong [专家分:510] 发布于 2007-01-13 18:28:00
[quote]error occur at " fwprintf(out,"%ld",total[m]); ":
cannot convert `const char*' to `const wchar_t*' for argument `2' to `int fwprintf(FILE*, const wchar_t*, ...)'
[/quote]
这样子是不行的,因为它的位数会超过宽字符的位数(32/64/128),而结果有可能是大于200位!!!
5 楼
Czhxdong [专家分:510] 发布于 2007-01-13 18:29:00
这道题,我已经做出来了!
6 楼
vcacm [专家分:1500] 发布于 2007-01-14 21:10:00
我通过筛选法来找素数:
可为什么用链表却比用数组要更多的时间呢?
希望各位牛人指点一下:
程序如下:
NO.1(数组)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<memory.h>
#define MAXV 500000001
#include<math.h>
int main()
{
clock_t end,begin;
long prime[MAXV];
long i,j,k,m,n,num=0;
scanf("%ld",&n);
begin=clock();
k=(long)sqrt(n);
for(i=3;i<=n;i+=2)
prime[i]=1;
for(i=3;i<=k;i+=2)
{
if(prime[i])
for(j=2*i;j<=n;j+=i)
prime[j]=0;
}
for(m=3;m<=n;m+=2)
if(prime[m])
num++;
printf("\n%ld",num+1);
end=clock();
printf("\n\nRUN %f SECONDS!",(double)(end-begin)/CLOCKS_PER_SEC);
return 0;
}
NO.2(链表)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
long N;
typedef struct prime
{
long data;
struct prime *next;
}PRI;
PRI *creat_list(PRI *head)
{
PRI *po,*nw;
long i;
po=head;
nw=(PRI *)malloc(sizeof(PRI));
nw->data=2;
nw->next=NULL;
po->next=nw;
po=nw;
for(i=3;i<=N;i+=2)
{
nw=(PRI *)malloc(sizeof(PRI));
nw->data=i;
nw->next=NULL;
po->next=nw;
po=nw;
}
return head;
}
PRI *del_data(PRI *head)
{
long k;
PRI *s,*e,*m,*pt;
k=(long)sqrt(N);
pt=head->next;
while(pt->next && pt->data<=k)
{
s=pt;
e=pt->next;
while(e)
{
if(e->data%pt->data==0)
{s->next=e->next;
e=s->next;
}
else
{
s=e;
e=e->next;
}
}
pt=pt->next;
}
return head;
}
void *print(PRI *head)
{
PRI *pi;
pi=head->next;
printf("\n");
while(pi)
{
printf("%ld ",pi->data);
pi=pi->next;
}
}
int main()
{
clock_t end,begin;
PRI *head,*p,*q;
long num=0;
printf("Input the number:");
scanf("%ld",&N);
begin=clock();
p=(PRI *)malloc(sizeof(PRI));
p->next=NULL;
head=p;
head=creat_list(head);
head=del_data(head);
print(head);
q=head->next;
print(head);
while(q)
{
num++;
q=q->next;
}
end=clock();
printf("\nIn the num of %ld has %ld primes!",N,num);
printf("\nHAS RUN %f seconds!",(double)(end-begin)/CLOCKS_PER_SEC);
return 0;
}
7 楼
vcacm [专家分:1500] 发布于 2007-01-14 22:02:00
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<memory.h>
#include<time.h>
#define MAX 1000
long total[MAX],suab[MAX];
long num=0,lab=0;
long k,w;
long jinzi_2k(long mod,long jin)
{
long jin10=1,jin2k=0,i,j,save;
for(i=mod-1;i>=1;i--)
{
save=1;
for(j=1;j<=i;j++)
save*=2;
jin10+=save;
}
jin2k=jin10%jin;
return jin2k;
}
long new_jiecheng(long min,long max,long *sum)
{
long i,j,h,l,digit=0;
sum[0]=min;
for(i=min+1;i<=max;i++)
{
for(j=0;j<=digit;j++)
sum[j]*=i;
for(h=0;h<=digit;h++)
if(sum[h]>=10)
{
if(sum[digit]>=10)
digit++;
sum[h+1]+=sum[h]/10;
sum[h]=sum[h]%10;
}
}
return digit;
}
int big_bijiao(long *sua,long *sub,long la,long lb)
{
long i,j;
for(i=la,j=lb;j>=0&&i>=j;)
{
if(sua[i]>sub[j])
{
break;
}
else if(sua[i]<sub[j])
{
break;
}
else if(sua[i]==sub[j])
{
if(j==0)
break;
j--;
i--;
}
}
if(sua[i]>sub[j])
return 1;
else if(sua[i]<sub[j])
return -1;
return 0;
}
void big_chufa(long sua[],long sub[],long la,long lb)
{
long i,j,h,r,p,q,m,n,laa,len;
long ab[MAX],sab[MAX],saab[MAX];
memset(sab,0,sizeof(sab));
memset(suab,0,sizeof(suab));
memset(saab,0,sizeof(saab));
laa=0;
if(sub[lb]==1&&lb==0)
{
for(i=0;i<=la;i++)
suab[i]=sua[i];
lab=la;
}
else
{
for(i=la;i>=lb;i--)
{
for(j=0;j<=9;)
{
memset(ab,0,sizeof(ab));
for(h=0;h<=lb;h++)
ab[h]=sub[h]*j;
for(r=0;r<lb;r++)
if(ab[r]>=10)
{
ab[r+1]+=ab[r]/10;
ab[r]=ab[r]%10;
}
if(big_bijiao(sua,ab,i,lb)==-1)
break;
else
{
j++;
for(m=0;m<=lb;m++)
sab[m]=ab[m];
}
}
saab[laa++]=j-1;
for(p=0,q=(lb==0)?i:i-lb;p<=lb;p++,q++)
{
if(sua[q]<sab[p])
{
sua[q+1]-=1;
sua[q]+=10;
}
sua[q]-=sab[p];
}
sua[i-1]+=sua[i]*10;
}
len=0;
while(saab[len]==0)
{
len++;
}
lab=laa-len-1;
for(m=0,n=laa-1;m<=lab;m++,n--)
suab[m]=saab[n];
}
}
void big_add()
{
long p,q,r;
num = num>lab ? num+1 : lab+1;
for(p=0;p<=num;p++)
{
total[p]+=suab[p];
if(total[p]>=10)
{
total[p+1]+=total[p]/10;
total[p]%=10;
}
}
if(total[num]==0)
num--;
}
void compute(long n,long m)
{
long i,j,ma;
long sua[MAX],sub[MAX],la=0,lb=0;
memset(sua,0,sizeof(sua));
memset(sub,0,sizeof(sub));
memset(suab,0,sizeof(suab));
lab=0;
ma=m-n;
if(m>n)
{
if(ma>=n)
{
la=new_jiecheng(ma+1,m,sua);
lb=new_jiecheng(1,n,sub);
}
else
{
la=new_jiecheng(n+1,m,sua);
lb=new_jiecheng(1,ma,sub);
}
big_chufa(sua,sub,la,lb);
}
else
{
lab=0;
suab[0]=1;
}
}
8 楼
vcacm [专家分:1500] 发布于 2007-01-14 22:02:00
int main()
{
clock_t end,begin;
FILE *in=fopen("c:\\digital9.in","r");
FILE *out=fopen("c:\\digital9.out","w");
long h,i,j,l,wu,most=0,mod,m,ma,mb;
long wei=0,yumax=0;
begin=clock();
fscanf(in,"%ld %ld",&k,&w);
most=(long)pow(2,k)-1;
if(w%k==0)
{
wei=w/k>most?most:w/k;
for(i=2;i<=wei;i++)
{
compute(i,most);
big_add();
}
}
else if(w%k!=0&&w/k+1>most)
{
wei=most;
for(i=2;i<=wei;i++)
{
compute(i,most);
big_add();
}
}
else if(w%k!=0&&w/k+1<=most)
{
wei=w/k+1;
mod=w%k;
yumax=jinzi_2k(mod,(long)pow(2,k));
for(i=2;i<=wei-1;i++)
{
compute(i,most);
big_add();
}
wu=most-1;
wei=wei-1;
for(j=1;wu>=wei&&j<=yumax;j++)
{
compute(wei,wu);
big_add();
wu--;
}
}
for(m=num;m>=0;m--)
fprintf(out,"%ld",total[m]);
end=clock();
fprintf(out,"\n\nthe program has run %f seconds!",(double)(end-begin)/CLOCKS_PER_SEC);
fclose(out);
return 0;
}
9 楼
tenm [专家分:330] 发布于 2007-01-16 20:14:00
楼主,你的错了,
网络搜的标准测试数据
1:3 6/21
2:3 17/119
3:4 1000/32752
4:4 47/32631
5:5 2000/2147483616
6:5 107/2135645927
7:6 107/4141511146315813
8:7 4000/170141183460469231731687303715884105600
9:8 4000/57896044618658097711785492504343953926634992332820282019728792003956564819712
10:2 8/4
#define _INCLUDE_LONGLONG
#include <stdlib.h>
#include <string>
using namespace std;
typedef long long int64;
int pow_2[10]={1,2,4,8,16,32,64,128,256,512};
int jishu=0;
int tmp_ret[512][2000]={0};
string tmp_store[512][4000];
string longtostr(int64 i)
{
if (i==0) return "";
char buff[256];
snprintf(buff,sizeof(buff),"%lld",i);
return string(buff);
}
void trimleft(string &s,int i)
{
int l=s.size();
while ( i-- > l) s="0"+s;
}
string gettmp(string num,int i,int step)
{
if( num.size() >= i+step )
return num.substr(num.size()-i-step,step);
else if( num.size() > i )
return num.substr(0,num.size()-i);
else
return "0";
}
string int64add(string num1,string num2)
{
string sum;
if (num1.size() < num2.size()) num2.swap(num1);
int length=num1.size();
int jinwei=0;
int max=0;
for(int i=0;i<=length;i+=17){
max=0;
string tmp1=gettmp(num1,i,17);
string tmp2=gettmp(num2,i,17);
if (tmp1.size()==17 || tmp2.size()==17) max=1;
int64 inttmp1 = strtoll(tmp1.c_str(),NULL,10);
int64 inttmp2 = strtoll(tmp2.c_str(),NULL,10);
string tmpsum=longtostr(inttmp1+inttmp2+jinwei);
if (max==1 && tmpsum.size()<17 ) trimleft(tmpsum,17);
if (tmpsum.size()>17){
jinwei=1;
tmpsum=tmpsum.substr(tmpsum.size()-17,17);
}
else {
jinwei=0;
}
sum=tmpsum+sum;
}
return sum;
}
string int64minus(string num1,string num2)
{
string sum;
if (num1.size() < num2.size()) num2.swap(num1);
int length=num1.size();
int tuiwei=0;
for(int i=0;i<=length;i+=17){
string tmp1=gettmp(num1,i,18);
string tmp2=gettmp(num2,i,17);
int64 inttmp1 = strtoll(tmp1.c_str(),NULL,10);
int64 inttmp2 = strtoll(tmp2.c_str(),NULL,10);
string tmpsum=longtostr(inttmp1-inttmp2-tuiwei);
if (tmp1.size()==18 && tmpsum.size()>17){
tuiwei=0;
tmpsum=tmpsum.substr(tmpsum.size()-17,17);
}
else if(tmp1.size()==18 && tmpsum.size()<=17 ){
tuiwei=1;
}
else {
tuiwei=0;
}
sum=tmpsum+sum;
}
return sum;
}
void init_ret(int jishu)
{
int i=jishu;
while( i-- > 0 ) {
tmp_store[i][2]=longtostr(jishu-1-i);
tmp_store[i][2]=int64add(tmp_store[i][2],tmp_store[i+1][2]);
}
}
void set_number(int weishu)
{
int j=2;
while( j++ < weishu ) {
int i=jishu;
while( i-- > 1 )
tmp_store[i][j]=int64add(tmp_store[i+1][j-1],tmp_store[i+1][j]);
}
}
string get_number(int k,int w)
{
int i=w/k;
int j=w%k;
jishu=pow_2[k];
init_ret(pow_2[k]);
string count;
string tmp_count;
if( j != 0){
set_number(i+1);
}
else {
set_number(i);
}
if(j !=0){
int num=pow_2[j]-1;
string tmp_count1=tmp_store[1][i+1];
string tmp_count2=tmp_store[num+1][i+1];
tmp_count=int64minus(tmp_count1,tmp_count2);
}
for(int n=2;n<=i;n++)
count=int64add(count,tmp_store[1][n]);
count=int64add(count,tmp_count);
return count;
}
int main(int argc, char *argv[])
{
int k=atoi(argv[1]);
int w=atoi(argv[2]);
string ret=get_number(k,w);
printf("k=%d,w=%d,ret=%s.\n",k,w,ret.c_str());
return 0;
}
编译环境 linux环境c++
10 楼
vcacm [专家分:1500] 发布于 2007-02-06 23:56:00
这个就是对的啦:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<memory.h>
#include<time.h>
#define MAX 1000
long total[MAX],suab[MAX];
long num=0,lab=0;
long k,w;
long jinzi_2k(long mod,long jin)
{
long jin10=1,jin2k=0,i,j,save;
for(i=mod-1;i>=1;i--)
{
save=1;
for(j=1;j<=i;j++)
save*=2;
jin10+=save;
}
jin2k=jin10%jin;
return jin2k;
}
long new_jiecheng(long min,long max,long *sum)
{
long i,j,h,l,digit=0;
sum[0]=min;
for(i=min+1;i<=max;i++)
{
for(j=0;j<=digit;j++)
sum[j]*=i;
for(h=0;h<=digit;h++)
if(sum[h]>=10)
{
if(sum[digit]>=10)
digit++;
sum[h+1]+=sum[h]/10;
sum[h]=sum[h]%10;
}
}
return digit;
}
int big_bijiao(long *sua,long *sub,long la,long lb)
{
long i,j;
for(i=la,j=lb;j>=0&&i>=j;)
{
if(sua[i]>sub[j])
{
break;
}
else if(sua[i]<sub[j])
{
break;
}
else if(sua[i]==sub[j])
{
if(j==0)
break;
j--;
i--;
}
}
if(sua[i]>sub[j])
return 1;
else if(sua[i]<sub[j])
return -1;
return 0;
}
void big_chufa(long sua[],long sub[],long la,long lb)
{
long i,j,h,r,p,q,m,n,laa,len;
long ab[MAX],sab[MAX],saab[MAX];
memset(sab,0,sizeof(sab));
memset(suab,0,sizeof(suab));
memset(saab,0,sizeof(saab));
laa=0;
if(sub[lb]==1&&lb==0)
{
for(i=0;i<=la;i++)
suab[i]=sua[i];
lab=la;
}
else
{
for(i=la;i>=lb;i--)
{
for(j=0;j<=9;)
{
memset(ab,0,sizeof(ab));
for(h=0;h<=lb;h++)
ab[h]=sub[h]*j;
for(r=0;r<lb;r++)
if(ab[r]>=10)
{
ab[r+1]+=ab[r]/10;
ab[r]=ab[r]%10;
}
if(big_bijiao(sua,ab,i,lb)==-1)
break;
else
{
j++;
for(m=0;m<=lb;m++)
sab[m]=ab[m];
}
}
saab[laa++]=j-1;
for(p=0,q=(lb==0)?i:i-lb;p<=lb;p++,q++)
{
if(sua[q]<sab[p])
{
sua[q+1]-=1;
sua[q]+=10;
}
sua[q]-=sab[p];
}
sua[i-1]+=sua[i]*10;
}
len=0;
while(saab[len]==0)
{
len++;
}
lab=laa-len-1;
for(m=0,n=laa-1;m<=lab;m++,n--)
suab[m]=saab[n];
}
}
我来回复