2010-11-30 11 views

Répondre

7
char *c = "200939915"; 
char *d = c + 1; 
+1

+1; Si vous voulez traiter le nombre comme une chaîne, faites-en une chaîne. – tenfour

+0

N'oubliez pas que 'sizeof (d)! = Sizeof (c)' –

+0

Quand je vais imprimer le nouveau caractère, il est vide? –

0

Une autre méthode, bien que j'aime Matt Kane mieux:

unsigned long n = 42424242; 
n = n % (unsigned long)pow(10.0, (double)floor(log10(n))); 
// n = 2424242; 
+0

'pow' renvoie un double qui n'est pas valide avec le ''% opérateur '' Cette approche est en principe sujette à des problèmes d'arrondis Essayez 'printf ("% lld \ n ", (long long) pow (10,18)); 'ou alors –

+0

Hey ... Pourquoi ai-je obtenir -1? –

1

Je vais probablement attirer les downvoters, mais voici ce que je ferais:

#include <iostream> 
#include <math.h> 

int main() 
{ 
    int number; 
    std::cin >> number; 

    int temp = number; 
    int digits = 0; 
    int lastnumber = 0; 
    while(temp!=0) 
    { 
     digits++; 
     lastnumber = temp % 10; 
     temp = temp/10; 
    } 

    number = number % (lastnumber * (int)pow(10,digits-1)); 
    std::cout << number << std::endl; 
    return 0; 
} 

évidemment puisque vous voulez il en c changer std::cin à scanf (ou autre) et std::cout à printf (ou autre). Gardez à l'esprit cependant que si vous voulez que les deux 00 restent dans le côté gauche du nombre, la réponse de Kane est ce que vous devriez faire. Cheers

+0

Ne vous inquiétez pas, je ne vais pas downvote. :) Vous pouvez toujours wiki de la communauté. –

Questions connexes