我需要代碼或指針進行數字加法。例如:獲取單個數字的基礎上的下一個整數
59 + 11 = 60
55 + 11 = 66
99 + 11 = 00
基本上,我想忽略攜帶時9 + 1
。所以9 + 1
應該返回0
而不是10
,並且對於任何其他數字,它應返回實際總和(即5 + 1 = 6
)。
我需要代碼或指針進行數字加法。例如:獲取單個數字的基礎上的下一個整數
59 + 11 = 60
55 + 11 = 66
99 + 11 = 00
基本上,我想忽略攜帶時9 + 1
。所以9 + 1
應該返回0
而不是10
,並且對於任何其他數字,它應返回實際總和(即5 + 1 = 6
)。
你好,ObscureRobot,不是它沒有錯別字。這就是我要的。 f(59)= 60 f(55)= 66 f(99)= 00 –
只適用於2位數 – PengOne
@PengOne是的,但不清楚提問者是否需要兩位數以上。 – ObscureRobot
要做到這一點,你需要分別提取十位數和個位數,單獨添加,然後將它們放回到一起。
下面是一個示例:請注意,它不會幫助您防止數百個進位。爲此,您不得不調整算法以專門處理它,或者按數字分割數字並以這種方式添加它們。
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;
}
使用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
}
我敢肯定,這將是在數學屁股疼,所以最簡單的將是遍歷數字並旋轉它們。在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)
如果你只談論的兩位數字,你可以用一個比較簡單的形式:
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))
我們需要串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);
}
你能有點更精確的有關規則? – PengOne
我想他想通過序列[0-9]逐個旋轉每個數字。 – Amadan
21 + 11 = 32,22 + 11 = 33,29 + 11 = 30,99 + 11 = 00 ....我會一直加入11,最大的數字可以是99. –