#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);}}}