It looks like you're new here. If you want to get involved, click one of these buttons!

- 140.6K All Categories
- 103.5K Programming Languages
- 6.4K Assembler Developer
- 1.9K Basic
- 39.9K C and C++
- 2.9K C#
- 7.9K Delphi and Kylix
- 4 Haskell
- 9.7K Java
- 4.1K Pascal
- 1.3K Perl
- 2K PHP
- 533 Python
- 37 Ruby
- 4.4K VB.NET
- 1.6K VBA
- 20.8K Visual Basic
- 2.6K Game programming
- 314 Console programming
- 90 DirectX Game dev
- 1 Minecraft
- 110 Newbie Game Programmers
- 2 Oculus Rift
- 9K Applications
- 1.8K Computer Graphics
- 734 Computer Hardware
- 3.4K Database & SQL
- 535 Electronics development
- 1.6K Matlab
- 628 Sound & Music
- 257 XML Development
- 3.3K Classifieds
- 198 Co-operative Projects
- 194 For sale
- 190 FreeLance Software City
- 1.9K Jobs Available
- 602 Jobs Wanted
- 203 Wanted
- 2.9K Microsoft .NET
- 1.7K ASP.NET
- 1.1K .NET General
- 3.4K Miscellaneous
- 7 Join the Team
- 8 User Profiles
- 354 Comments on this site
- 69 Computer Emulators
- 2.1K General programming
- 187 New programming languages
- 619 Off topic board
- 182 Mobile & Wireless
- 56 Android
- 124 Palm Pilot
- 335 Multimedia
- 151 Demo programming
- 184 MP3 programming
- 0 Bash scripts
- 22 Cloud Computing
- 53 FreeBSD
- 1.7K LINUX programming
- 370 MS-DOS
- 0 Shell scripting
- 320 Windows CE & Pocket PC
- 4.1K Windows programming
- 924 Software Development
- 412 Algorithms
- 68 Object Orientation
- 89 Project Management
- 93 Quality & Testing
- 261 Security
- 7.6K WEB-Development
- 1.8K Active Server Pages
- 61 AJAX
- 2 Bootstrap Themes
- 55 CGI Development
- 28 ColdFusion
- 224 Flash development
- 1.4K HTML & WEB-Design
- 1.4K Internet Development
- 2.2K JavaScript
- 35 JQuery
- 296 WEB Servers
- 136 WEB-Services / SOAP

Before I begin, it should be noted that the reason I am making this algorithm is for the sole purpose of manually translating it to assembly as a programming excersize.

I'd like to optimize this algorithm if possible - this is a single C function which should return a string representing a number. The string won't print with printf at the moment, however, this isn't a problem as the function i use in assembler to print the string is very different from printf.

[code]

int int2str(unsigned int num, unsigned int *string)

{

unsigned int digits, x, y, z, n = 0;

//find the total number of digits.

for (digits = 0; exponent(digits, 10) <= num; digits++)

;

//for each digit, find the digit's value and add it to

//the string

for (x = digits; x >= 1; x = x-1)

{

//find the value of the largest digit

y = num;

z = x;

// ">>" until only one digit is left

while (z >= 2)

{

y=y/10;

z = z-1;

}

//add the digit to the string

string[n] = y+48;

n++; //increment the character index

//remove the largest digit from num

num = num-(y*exponent(x-1, 10));

}

string [n] = 0;

}

//exponent was used elsewhere. This function returns x to the nth power:

int exponent(int x, int n)

{

//code here

}

[/code]

Thanks for any help you may be able to offer! I'll be honest, i'm not a C expert, i am much more interested in learning assembler.

Sincerely,

Jakykong (Jack Mudge)

[email protected]

Terms of use / Privacy statement / Publisher: Lars Hagelin

Programmers Heaven articles / Programmers Heaven files / Programmers Heaven uploaded content / Programmers Heaven C Sharp ebook / Operated by CommunityHeaven

© 1997-2015 Programmersheaven.com - All rights reserved.

## Comments

621: Hi!

: Before I begin, it should be noted that the reason I am making this algorithm is for the sole purpose of manually translating it to assembly as a programming excersize.

:

: I'd like to optimize this algorithm if possible - this is a single C function which should return a string representing a number. The string won't print with printf at the moment, however, this isn't a problem as the function i use in assembler to print the string is very different from printf.

:

: [code]

: int int2str(unsigned int num, unsigned int *string)

: {

: unsigned int digits, x, y, z, n = 0;

: //find the total number of digits.

: for (digits = 0; exponent(digits, 10) <= num; digits++)

: ;

[red]

//instead of the above loop, this is much faster

//(only usable for base 10 ofcourse).

//no need for a, probably slow, exponent-function.

int digits = 1, testnum = 10;

while (testnum < num) { testnum *= 10; digits++; }

[/red]

: //for each digit, find the digit's value and add it to

: //the string

: for (x = digits; x >= 1; x = x-1)

: {

: //find the value of the largest digit

: y = num;

: z = x;

: // ">>" until only one digit is left

: while (z >= 2)

: {

: y=y/10;

: z = z-1;

: }

: //add the digit to the string

: string[n] = y+48;

: n++; //increment the character index

: //remove the largest digit from num

: num = num-(y*exponent(x-1, 10));

: }

: string [n] = 0;

[red]

//The entire loop above can be replaced by:

sprintf(string, "%d", num);

//but, since you are going to convert this to assembly,

//you may not want to use sprintf.

//then the following is a faster alternative:

int index = digits;

string[index--] = '';

while (num > 0)

{

string[index--] = (num % 10) + '0';

num /= 10;

}

[/red]

//that's all!

: }

:

: //exponent was used elsewhere. This function returns x to the nth power:

: int exponent(int x, int n)

: {

: //code here

: }

: [/code]

:

: Thanks for any help you may be able to offer! I'll be honest, i'm not a C expert, i am much more interested in learning assembler.

: Sincerely,

: Jakykong (Jack Mudge)

: [email protected]

:

Greets,

Eric Goldstein

http://www.gvh-maatwerk.nl

103: [b][red]This message was edited by tsagld at 2006-5-22 3:27:17[/red][/b][hr]

: : Hi!

: : Before I begin, it should be noted that the reason I am making this algorithm is for the sole purpose of manually translating it to assembly as a programming excersize.

: :

: : I'd like to optimize this algorithm if possible - this is a single C function which should return a string representing a number. The string won't print with printf at the moment, however, this isn't a problem as the function i use in assembler to print the string is very different from printf.

: :

: : [code]

: : int int2str(unsigned int num, unsigned int *string)

: : {

: : unsigned int digits, x, y, z, n = 0;

: : //find the total number of digits.

: : for (digits = 0; exponent(digits, 10) <= num; digits++)

: : ;

: [red]

: //instead of the above loop, this is much faster

: //(only usable for base 10 ofcourse).

: //no need for a, probably slow, exponent-function.

: int digits = 1, testnum = 10;

: while (testnum < num) { testnum *= 10; digits++; }

: [/red]

:

: : //for each digit, find the digit's value and add it to

: : //the string

: : for (x = digits; x >= 1; x = x-1)

: : {

: : //find the value of the largest digit

: : y = num;

: : z = x;

: : // ">>" until only one digit is left

: : while (z >= 2)

: : {

: : y=y/10;

: : z = z-1;

: : }

: : //add the digit to the string

: : string[n] = y+48;

: : n++; //increment the character index

: : //remove the largest digit from num

: : num = num-(y*exponent(x-1, 10));

: : }

: : string [n] = 0;

:

: [red]

: //The entire loop above can be replaced by:

: sprintf(string, "%d", num);

:

: //but, since you are going to convert this to assembly,

: //you may not want to use sprintf.

: //then the following is a faster alternative:

: int index = digits;

: string[index--] = '';

: while (num > 0)

: {

: string[index--] = (num % 10) + '0';

: num /= 10;

: }

: [/red]

:

: //that's all!

:

: : }

: :

: : //exponent was used elsewhere. This function returns x to the nth power:

: : int exponent(int x, int n)

: : {

: : //code here

: : }

: : [/code]

: :

: : Thanks for any help you may be able to offer! I'll be honest, i'm not a C expert, i am much more interested in learning assembler.

: : Sincerely,

: : Jakykong (Jack Mudge)

: : [email protected]

: :

:

:

: Greets,

: Eric Goldstein

: http://www.gvh-maatwerk.nl

:

:

:

:

:

Thanks! Heh ... well can anyone tell that i don't program many high-level applications?

And, on the loop to find the digit. DUH! why didn't i think of that? of course - modulus. the remainder. the remainder is always going to be the last digit if you divide by 10 .... i even knew that too ... thats how i convert from base to base by hand.

Thanks again!

Sincerely,

Jakykong (Jack Mudge)

[email protected]