2014-04-03 95 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的问题标记)? –