#include<stdio.h> int reverse(int num,int tmp){ if(num == 0) return tmp; return reverse(num/10,tmp*10+num%10); } int reverse_front(int num){ return num>=0? reverse(num,0):-reverse(-num,0); } int main(){ int num; scanf("%d",&num); printf("%d\n",reverse_front(num)); }指定用C语言,另外有些边界情况未讨论,此递归乃是迭代改过来的。
#include <stdio.h> #include <cmath> static bool isNotZero = false; void reverse(int a) { if (a > 0) { if (a % 10 == 0) { if (isNotZero == false) { a = a / 10; reverse(a); } else { printf("%d",a % 10); a = a / 10; reverse(a); } } else { isNotZero = true; printf("%d",a % 10); a = a / 10; reverse(a); } } else { return; } } int main () { int num; scanf("%d",&num); if (num < 0) { printf("-"); } reverse(fabs(num)); return 0; }
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); StringBuffer sb = new StringBuffer(); while(sc.hasNext()){ int n = sc.nextInt(); if(n<0) System.out.print("-"); reverse(sb,Math.abs(n)); String str = new String(sb); String tr = str.replaceFirst("^0*", ""); System.out.println(tr); } sc.close(); } public static void reverse(StringBuffer sb, int n){ if(n!=0){ sb.append(n%10); reverse(sb,n/10); } } }
用自己电脑的python3.6运行都能正确输出,在这里的python3.5输出总是不对,这到底是是为什么?难道是版本的差异?
class solution:
def reverseOutput(self,x):
if x >= 0:
print (x % 10,end = "")
x = x // 10
if x != 0:
return self.reverseOutput(x)
else:
print ("\n")
else:
print('-',end ="")
self.reverseOutput(-x)
#include <stdio.h> #include <stdlib.h> bool not0 = false; void doprint(int n) { if(n == 0) return; int x = n % 10; if(!not0) { if(x) not0 = true; } if(not0) printf("%d",x); doprint(n / 10); } int main() { int n = 0; scanf("%d",&n); if(n < 0) { printf("-"); } doprint(::abs(n)); }
importjava.util.Scanner;publicclassMain {publicstaticvoidmain(String[] args) {Scanner sc = newScanner(System.in);intnum = sc.nextInt();System.out.println(inverse(num));}publicstaticintinverse(intnum){booleanflag = num>=0?true:false;intresult = inverse1(0, Math.abs(num));if(flag){returnresult;}else{return0- result;}}publicstaticintinverse1(intresult,intnum){if(num < 10){result += num;returnresult;}else{result += num % 10;returninverse1(result *10, num / 10);}}}