2014-04-03 97 views
0
如果用戶輸入了「值」爲1223445

輸出應如下所示:我的程序停止循環,我無法找出爲什麼

變化#後1:12235 後變化#2:135

該代碼旨在取出兩個具有相同值的連續數字。第一個循環的作品,但然後停止,我不明白爲什麼。這裏是代碼:

{ 

int count; 
int y; 
int z; 
int b; 
int c; 
int d; 
int a; 
int ct; 
y = 0; 
z = 1; 
d = 0; 
count = 0; 
if (value > 0) 
    while ((z * 10 + z) != (y % 100)) 
    { 
    y = value % 10 + y * 10; 
    z = y % 10; 
    value /= 10; 
    count = count + 1; 
    } 
    value = value * pow(10, count - 2); 
    y = y/100; 
    count = count - 3; 
    while(y > 0) 
    { 
    b = y % 10; 
    c = pow(10, count); 
    d = d + c * b; 
    y = y/10; 
    count = count - 1; 
    } 
value = value + d; 
ct = 1; 
printf("After change #%d: %d\n", ct, value); 
a = value; 
while (a > 1) 
    { 
    if((a % 100) - (a % 10) - (10 * (a % 10)) == 0) 
    Change(value); 
    else 
    a = a/10; 
    } 
    return; 
} 
+2

它看起來像你治療輸入值爲整數。將它看作一個字符串可能更容易。如果你沒有對它進行數學計算,那不是一個數字。 – Velox

+0

這是一個數字,它是用戶輸入的1223445,就像我在頁面頂部所說的 – bhaan

+0

@bhaan:你錯過了上述評論的要點 - 如果你將'value'改爲'string'那麼代碼將更容易實現。 –

回答

0

這裏有一個簡單的解決方案:(不知道你想怎麼處理奇數重複例如「111」,「11111」)

public static long strip(long value, long sum) { 
     if(value==0) return sum; 

     long tens = value % 100; 
     long ones = value % 10; 
     if(ones*10 == tens-ones) { 
      return strip(value /100, sum); 
     } 

     if(sum==0) sum +=(value%10); 
     else { 
      long x = (long)Math.ceil((Math.log10(sum))); 
      sum =(long) (Math.pow(10,x) * ones + sum); 
     } 
     return strip(value /10, sum); 
    } 
+0

這看起來更像Java或C#而不是C(這是OP的問題標記)? –