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

- 140.7K All Categories
- 104.4K Programming Languages
- 6.4K Assembler Developer
- 1.8K Basic
- 39.7K C and C++
- 4.2K C#
- 7.9K Delphi and Kylix
- 4 Haskell
- 9.6K Java
- 4.1K Pascal
- 1.3K Perl
- 1.9K PHP
- 505 Python
- 48 Ruby
- 4.3K VB.NET
- 1.6K VBA
- 20.8K Visual Basic
- 2.6K Game programming
- 309 Console programming
- 88 DirectX Game dev
- 1 Minecraft
- 109 Newbie Game Programmers
- 2 Oculus Rift
- 8.9K Applications
- 1.8K Computer Graphics
- 726 Computer Hardware
- 3.4K Database & SQL
- 520 Electronics development
- 1.6K Matlab
- 627 Sound & Music
- 254 XML Development
- 3.3K Classifieds
- 189 Co-operative Projects
- 179 For sale
- 189 FreeLance Software City
- 1.9K Jobs Available
- 599 Jobs Wanted
- 201 Wanted
- 2.9K Microsoft .NET
- 1.7K ASP.NET
- 1.1K .NET General
- 3K Miscellaneous
- 3 Join the Team
- 2 User Profiles
- 353 Comments on this site
- 59 Computer Emulators
- 1.8K General programming
- 168 New programming languages
- 597 Off topic board
- 165 Mobile & Wireless
- 39 Android
- 124 Palm Pilot
- 335 Multimedia
- 151 Demo programming
- 184 MP3 programming
- 0 Bash scripts
- 16 Cloud Computing
- 52 FreeBSD
- 1.7K LINUX programming
- 366 MS-DOS
- 0 Shell scripting
- 319 Windows CE & Pocket PC
- 4.1K Windows programming
- 885 Software Development
- 404 Algorithms
- 67 Object Orientation
- 85 Project Management
- 88 Quality & Testing
- 233 Security
- 7.5K WEB-Development
- 1.8K Active Server Pages
- 61 AJAX
- 2 Bootstrap Themes
- 55 CGI Development
- 19 ColdFusion
- 222 Flash development
- 1.4K HTML & WEB-Design
- 1.4K Internet Development
- 2.2K JavaScript
- 33 JQuery
- 285 WEB Servers
- 112 WEB-Services / SOAP

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

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)

jack_mudge@hotmail.com

About & Contact / 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 LLC

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

## Comments

621Member: 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)

: jack_mudge@hotmail.com

:

Greets,

Eric Goldstein

http://www.gvh-maatwerk.nl

- Spam

0 · Vote Down Vote Up · Share on Facebook103Member: [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)

: : jack_mudge@hotmail.com

: :

:

:

: 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)

jack_mudge@hotmail.com

- Spam

0 · Vote Down Vote Up · Share on Facebook