Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

什么破数据,zzzzzzzzz对应的数字该显示zzzzzz显示aaaaaaa也能过?????正确的显示还给WA了!!!

Posted by 0943047777 at 2011-02-11 13:33:22 on Problem 1312
这破题数据绝对有问题。
下面代码能过,但连最后一个数据输入数字显示zzzzzzzz都不行。可以试试26、676等全是错。
然而写的所有数据都能通过的还给WA了。。。什么情况??
不信自己试试!!!
#include <iostream>
#include <sstream>
using namespace std;
const int size = 50;

struct hp{
    int len, s[size+1];
};

void hp_cpy(hp &a, const hp &b){
a.len = b.len;
for(int i=1; i<=a.len; i++)
   a.s[i] = b.s[i];
}

void hp_new(hp &a, string str){
    int i;
    while(str[0]=='0' && str.size()!=1)
       str.erase(0, 1);
    a.len = (int)str.size();
    for(i=1; i<=a.len; ++i)
       a.s[i] = str[a.len-i] - '0';
    for (i=a.len+1; i<=size; ++i)
       a.s[i] = 0;
}
void hp_show(const hp &y){
int i;
int n = y.len%3;
for(i=y.len; i>=1; i--){
    cout << y.s[i];
    if((y.len-i-n+1)%3 == 0 && i!=1) cout << ',';
}
    cout << endl;
}
void divide(const hp &a, int b, hp &c, int &d){
int i,len;
for(i=1; i<=size; i++)
   c.s[i] = 0;
len = a.len;
d = 0;
for(i=len; i>=1; i--){
   d = d*10 + a.s[i];
   c.s[i] = d/b;
   d %= b;
}
while(len>1 && c.s[len]==0) len--;
c.len=len;
}

void multiply(const hp &a, int b, hp &c){
int i, len;
for(i=1; i<=size; i++)
   c.s[i] = 0;
len = a.len;
for(i=1; i<=len; i++){
   c.s[i] += a.s[i]*b;
   c.s[i+1] += c.s[i]/10;
   c.s[i] %= 10;
}
len++;
while(c.s[len] >= 10){
   c.s[len+1] += c.s[len]/10;
   c.s[len] %= 10;
   len++;
}
while(len>1 && c.s[len]==0)
   len--;
c.len = len;
}

void addition(const hp &a, const hp &b, hp &c){
int i, len;
for(i=1; i<=size; i++)
   c.s[i] = 0;
if(a.len > b.len) len = a.len;
else len = b.len;
for(i=1; i<=len; i++){
   c.s[i] += a.s[i]+b.s[i];
   if(c.s[i] >= 10){
    c.s[i] %= 10;
    c.s[i+1]++;
   }
}
if(c.s[len+1] > 0) len++;
c.len = len;
}

int main(){
stringstream s;
string str, tmp3;
int i, j, len, p, r;
hp tmp1, tmp2, dec, q;
while(cin >> str && str != "*"){
   if(str[0] >= '0' && str[0] <= '9'){
    p = 0;
    hp_new(dec, str);
    while(!(dec.len == 1 && dec.s[1] == 0)){
     divide(dec, 26, q, r);
     hp_cpy(dec, q);
     tmp1.s[p++] = r;
    }
    for(i=p-1; i>=0; i--)
     cout << char(tmp1.s[i] + 'a' - 1);
    for(i=0; i<22-p; i++)
     cout << ' ';
    len = str.length();
    r = len%3;
    for(i=0; i<len; i++){
        cout << str[i];
        if((i-r+1)%3 == 0 && i!=len-1) cout << ',';
    }
    cout << endl;
   }
   else{
    len = str.length();
    cout << str;
    for(i=0; i<22-len; i++)
     cout << ' ';
    hp_new(dec, "0");
    for(i=len-1; i>=0; i--){
     s.clear();
     s << (str[i] - 'a' + 1);
     s >> tmp3;
     hp_new(tmp2, tmp3);
     for(j=0; j<len-i-1; j++){
      multiply(tmp2, 26, tmp1);
      hp_cpy(tmp2, tmp1);
     }
     addition(dec, tmp2, tmp1);
     hp_cpy(dec, tmp1);
    }
    hp_show(dec);
   }
}
}
 


Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator