rt,我用devc++编译以下代码时,若环境为32位,输出为67500000000000001
,若环境为64位,输出为67500000000000000
。求问原因
输入为
1
1 1000000000000000
代码为
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
long long ans,ans1;
void write(long long x){
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
return;
}
#define int long long
int tt;
int n;
int m;
inline int count(int x){
int ret=0;
if(x==0) return 1;
while(x) ret++,x/=10;
return ret;
}
inline int highnum(int x){
while(x>=10) x/=10;
return x;
}
inline int solve(int x){
int cnt=0;
for(int i=1;i<=x;i++) cnt=cnt*10+45*pow(10,i-1);
return cnt;
}
void solve1(){
ans=ans1=0;
cin>>n>>m;
if(m==0){
cout<<0<<endl;
return ;
}
n--;
bool book=false;
if(n<0) n=0,book=true;
while(n){
ans+=solve(count(n)-1)*highnum(n)+(1+highnum(n)-1)*(highnum(n)-1)/2*pow(10,count(n)-1)+highnum(n)*(n-highnum(n)*pow(10,count(n)-1)+1);
n-=highnum(n)*pow(10,count(n)-1);
// cout<<ans<<endl;
}
while(m){
ans1+=solve(count(m)-1)*highnum(m)+(1+highnum(m)-1)*(highnum(m)-1)/2*pow(10,count(m)-1)+highnum(m)*(m-highnum(m)*pow(10,count(m)-1)+1);
m-=highnum(m)*pow(10,count(m)-1);
// cout<<ans1<<endl;
}
// cout<<" "<<ans1<<" "<<ans<<endl;
if(!book) write(ans1-ans),cout<<endl;
else write(ans1),cout<<endl;
}
signed main(){
cin>>tt;
while(tt--){
solve1();
}
}
开int128没用。