| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
AC的朋友,指点一下这道题目的算法啊,我只会直接去循环计数,能结果正确,不过运行时间就太吓人了。#include<iostream>
#include<cstring>
using namespace std;
int count_0(int *a){
int len =32;
int fg=0;
int count=0;
for(int m=len-1;m>=0;m--){
if(a[m] !=0){
fg = m;
break;
}
}
if(fg ==0){
if(a[0]==0)
count =1;
return count;
}
for(int k=fg;k>=0;k--)
{
if(a[k] ==0)
count++;
}
return count;
}
int main(void)
{
char m[32],n[32];
int len_m,len_n,i,j;
unsigned int p,q,flag;
unsigned c[100]={0};
unsigned d[2]={0};
int pair=0;
int fgl;
while(cin>>m>>n)
{
int a[32]={0},b[32]={0};
p=atoi(m);
q=atoi(n);
if(p == -1){
break;
}else{
len_m=strlen(m);
len_n=strlen(n);
for(i=0;i<len_m;i++)
a[i]=m[len_m-1-i]-48;
for(j=0;j<len_n;j++)
b[j]=n[len_n-1-j]-48;
flag = q-p;
if(flag==0){
c[pair]=count_0(a);
pair++;
break;
}
if(flag !=0){
d[0]=count_0(a);
c[pair]=d[0];
for(unsigned index=1;index<= flag;index++){
int increment=0;
if(a[0]==0){
a[0]++;
increment = -1;
d[1]=d[0]+increment;
c[pair] += d[1];
d[0]=d[1];
continue;
}
a[0]++;
for(int m=31;m>=0;m--){
if(a[m] !=0){
fgl = m;
break;
}
}
for(i=0;i<=fgl;i++){
if(a[i]>=10){
a[i+1]++;
if(a[i+1] == 1 && i!=fgl)
increment--;
a[i]=a[i]%10;
if(a[i]==0)
increment++;
}
else
break;
}
d[1]=d[0]+increment;
c[pair] += d[1];
d[0]=d[1];
}
}
}
pair++;
}
for(j=0;j<pair;j++)
cout<<c[j]<<endl;
system("pause");
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator