2011-10-21 22 views
1

我需要代碼或指針進行數字加法。例如:獲取單個數字的基礎上的下一個整數

59 + 11 = 60 
55 + 11 = 66 
99 + 11 = 00 

基本上,我想忽略攜帶時9 + 1。所以9 + 1應該返回0而不是10,並且對於任何其他數字,它應返回實際總和(即5 + 1 = 6)。

+1

你能有點更精確的有關規則? – PengOne

+1

我想他想通過序列[0-9]逐個旋轉每個數字。 – Amadan

+0

21 + 11 = 32,22 + 11 = 33,29 + 11 = 30,99 + 11 = 00 ....我會一直加入11,最大的數字可以是99. –

回答

2

單獨

f(x) = (x/10 + 1) % 10 * 10 + (x % 10 + 1) % 10 

(其中%是mod operator - 它返回的餘數)

+0

你好,ObscureRobot,不是它沒有錯別字。這就是我要的。 f(59)= 60 f(55)= 66 f(99)= 00 –

+0

只適用於2位數 – PengOne

+0

@PengOne是的,但不清楚提問者是否需要兩位數以上。 – ObscureRobot

0

要做到這一點,你需要分別提取十位數和個位數,單獨添加,然後將它們放回到一起。

下面是一個示例:請注意,它不會幫助您防止數百個進位。爲此,您不得不調整算法以專門處理它,或者按數字分割數字並以這種方式添加它們。

int crazyAdd(int a, int b) { 
    int aTens = a % 10; 
    int bTens = b % 10; 
    int tens = aTens + bTens; 
    int ones = (a + b) % 10; 
    return tens + ones; 

} 

下面是一個如果你想增加數字這是更靈活的

int crazyAdd(int a, int b) { 
    int[] aDigits = extractDigits(a); // let there exist a function that 
    int[] bDigits = extractDigits(b); // puts the digits into an array 

    int size = aDigits.length; 
    if(size < bDigits.length) size = bDigits.length; 

    int digits = new int[size]; 
    for(int i = 0; i < digits.length; i++) { 
     int aDigit = i >= aDigits.length ? 0 : aDigits[i]; 
     int bDigit = i >= bDigits.length ? 0 : bDigits[i]; 
     digits[i] = (aDigit + bDigit) % 10; 
    } 
    int result = 0; 
    for(int digit : digits) { 
     result = result * 10 + digit; 
    } 
    return result; 
} 
1

使用int digits = log10(x)獲得數字數字,然後提取每個數字x,與x + 1 % 10替換,然後把他們重新走到一起,這樣的事情:

int number = N;   // STARTS AS THE ORIGINAL NUMBER 
int answer = 0;   // WILL BE THE NEXT NUMBER 
int power = 1;   // KEEPS TRACK OF POSITION 
int digits = log10(x); // TOTAL NUMBER OF DIGITS 

for (int d=0; d<digits; ++d) { 
    int x = (number + 1) % 10; // GET NEXT DIGIT, INCREMENT IT 
    answer += x*power;   // ADD TO ANSWER IN CORRECT POSITION 
    number = (number-x)/10; // REMOVE DIGIT FROM NUMBER 
    power *= 10;    // INCREMENT POSITION 
} 
0

我敢肯定,這將是在數學屁股疼,所以最簡單的將是遍歷數字並旋轉它們。在Ruby:

def rotate_digits(n) 
    result = 0 
    exp = 1 
    while n > 0 
    digit = n % 10 
    n /= 10 
    digit = (digit + 1) % 10 
    result += exp * digit 
    exp *= 10 
    end 
    result 
end 

puts rotate_digits(59) 
puts rotate_digits(55) 
puts rotate_digits(99) 

這給你一個數字,所以最後一個給你0。如果你真的想"00",很容易與字符串的工作:

def rotate_digits_as_string(n) 
    n.to_s.each_char.map { |c| ((c.to_i + 1) % 10).to_s }.join 
end 

puts rotate_digits_as_string(59) 
puts rotate_digits_as_string(55) 
puts rotate_digits_as_string(99) 
0

如果你只談論的兩位數字,你可以用一個比較簡單的形式:

def nextNum (num): 
    val = int(num) 
    if num == "99": 
     return "00" 
    if val > 89: 
     return "0" + str(val - 89) 
    if val % 10 == 9: 
     return str (val + 1) 
    return str (val + 11) 

這裏有一個小這表明在行動Python程序:

def nextNum (num): 
    if num == "99": 
     return "00" 
    val = int(num) 
    if val > 89: 
     return "0%d"%(val - 89) 
    if val % 10 == 9: 
     return "%02d"%(val + 1) 
    return "%02d"%(val + 11) 

for i in range (0,100): 
    s = "%02d"%(i) 
    print "%s -> %s"%(s,nextNum(s)) 
0

我們需要串input在這樣做的每個字符。

我們有一個功能,可以一次完成這一個角色。

char inc(char ch) 
{ 
    ch = (ch + 1) % '0'; // ANSI. 
    return(ch); 
} 

現在,我們需要一個函數,將字符串中這樣對每一個角色:

string szinc(string input) 
{ 
    for(i = 0; i < input.size(); i = i + 1) 
    { 
     input[i] = inc(input[i]); 
    } 

    return(input); 
} 
相關問題